Pgloader: A High-speed PostgreSQL Swiss Army Knife, Written in Lisp
pgloader.io
pgloader.io
You have self-contained binary files allowing you to play with /usr/bin/pgloader (or ./pgloader) without having to know anything about Common Lisp.
Enjoy ;-)
Also see the github page for the project at https://github.com/dimitri/pgloader
the main docs at https://github.com/dimitri/pgloader/blob/master/pgloader.1.m...
Check out the USAGE section (it's a quickstart really) at https://github.com/dimitri/pgloader/blob/master/pgloader.1.m...
Lisp! Gonna keep that one in mind.
While seldom as fast as e.g. FORTRAN let alone assembly (there was a period when MACLISP was faster at numerical code than DEC's PDP-10 FORTRAN, but that was at least as much due to DEC), to be fast enough on the old, slow hardware of its founding first couple of decades hackers had to figure out how to make it pretty fast on an absolute scale. E.g. they've been working on garbage collection for 55 years (!).
So compared to languages like Python and its various implimentations, you shouldn't be surprised if there are Lisps out there that are faster.
All that said, it's easy to quickly write a slow Lisp; a fast Lisp requires on the order of as much work as making a fast implementation of anything else. So caveat emptor ^_^.
As for languages like Rust, I think they're complimentary, and that a programmer ideally should at minimum be fluent in one systems programming language like C or Rust and one high level GCed language like Lisp, Python, Go, Ruby, Julia, Lua, etc. etc. etc. (Modern JITed Java kinda splits the difference; a contrarian would say it combines the productivity of C++ and the speed of a GCed language.)
Summary: crushes it.
I can say that libpq is not the best example of how to write a client. It uses all text, it doesn't use the asynchronicity very well.
I think there is some room in libpq for improvement, if only someone would take it on :)
[1] http://plan9.bell-labs.com/sources/contrib/maht/limbo/pg/
This would be the best way to do a migration without braking an existing system.
Adding support for the MySQL binlog replication format is on the TODO list, if you're proficient in it I would welcome hints to implement it correctly.
In terms of priority and organisation, it's Open Source so you know how it works right? Contributions are welcome, as are feature based sponsoring.
Let me see if I can figure it out and will try to give you a pull request.