|0.8.6||Dec 16, 2018|
|0.8.5||Jun 22, 2017|
|0.8.3||May 1, 2017|
|0.5.1||Mar 30, 2017|
|0.3.1||Dec 31, 2016|
#197 in Database interfaces
349 downloads per month
Asynchronous, HA (master-master) PostgreSQL driver on top of libpq.
- Designed to work with a master-master replicated database, such as BDR (but standalone databases are supported too).
libpq, leveraging it's asynchronous support.
- Maintains an asynchronous connection to every node of the replicated cluster.
- Pings the nodes (with
SELECT 1) to see who's closer/faster.
- Every operation is a separate transaction.
- If a node fails, the operation is transparently retried on another node.
- Operations are exposed as
futuresare backed by a thread or two and can be used without a
tokioreactor (because KISS).
- Fast mode: send the operation to every node and return the first answer.
- Pin mode: send the operation to one of the nodes only (useful to avoid some of the master-master conflicts).
- There is a JSON helper converting table rows to serde_json objects.
- If the operation wasn't pipelined already, dropping a
Futureallows the driver to cancel it.
- Database-level timeouts can be used to terminate slow operations early.
The combination of libpq and OpenSSL doesn't work very well during PostgreSQL server restarts. I've seen libpq SEGV-crash reliably when the OpenSSL layer is enabled. For the driver to properly work around PostgreSQL server unavailability and restarts I recommend adding the "sslmode=disable" disabler to the connection strings.