Craig Ringer

Senior Staff SDE

Craig Ringer is a Senior Staff SDE based out of Wellington in New Zealand. He was one of the early developers of the 2ndQuadrant BDR distributed multi-master replication software that later became EnterpriseDB Postgres Distributed. He is a recognised PostgreSQL contributor with contributions including libpq pipelining mode, logical replication improvements, and data protection fixes (reporting "FSyncgate").

 Craig's work touches many wildly varied areas, but he is currently focused on observability in Kubernetes-based cloud environments using technology including OpenTelemetry, Prometheus and Thanos. He enjoys solving complex problems that cross many layers and components. Contributing improvements, fixes, documentation and test cover to upstream projects are personal priorities, as he believes that it's important for companies to give back to open source projects. When not at a laptop, Craig enjoys building remote control aircraft, hiking, and visiting Wellington's beautiful beaches.

Read Blogs

Technical Blog
One feature quietly added to PostgreSQL 10 is the ability to determine the commit status of any transaction by transaction-id. It’s reasonable to wonder why you’d want this, since you know if you committed the transaction, it’s still in progress, or if you or rolled it back. And you can check for in-progress transactions in pg_stat_activity. It exists to help the application recover to a known...
Technical Blog
Support for using the TAP protocol to run extended regression tests was added to PostgreSQL back in 9.4 with the adoption of Perl’s prove tool and Test::More to test initdb, pg_basebackup, etc. Since then the TAP-based tests have been greatly expanded, particularly with the advent of the src/test/recovery tests and the PostgresNode module in PostgreSQL 9.6. PostgreSQL now comes with a built-in...
Technical Blog
PostgreSQL 10 now supports finding out the status of a recent transaction for recovery after network connection loss or crash. Recovery from indeterminate COMMIT If there was a COMMIT “in flight” when an application crashed, lost its connection to the DB server, or the DB server crashed, the commit’s status is indeterminate as far as the application can tell. The application does not know if the...
Technical Blog
Are you looking for a rpmsign --resign equivalent for Debian packages? Have you looked at debsign and wondered why you can’t run it on a .deb? Did you try to run dpkg-sig only to have it complain about BADSIG after signing your packages? Does it all make no sense? That’s because you don’t sign Debian packages. You sign the repository index that contains checksums for the packages. Tools like...
Technical Blog
The BDR and pglogical apt repository GnuPG signing keys have been renewed. Users should re-import the existing keys. You can verify that it’s still the same key as referenced in the documentation, just with a later expiry date. Simply run: wget --quiet -O - http://packages.2ndquadrant.com/bdr/apt/AA7A6805.asc | sudo apt-key add - sudo apt-key finger AA7A6805 | grep -A2 -B3 BDR Now check the...
Technical Blog
BDR is both a patch to PostgreSQL core and an extension on top of PostgreSQL core. How did that come about, and what’s it’s future? Development of BDR was initiated around the time PostgreSQL 9.2 was in development. Arguably earlier if you count things like the extension mechanism. The goal of BDR is, and has always been, to add necessary features to core PostgreSQL to perform asynchronous loosely...
Technical Blog
If you’re unable to connect to OpenVPN on Linux (Feodra 21, recent Ubuntu, etc) and are seeing errors like: VERIFY ERROR: depth=0, error=certificate signature failure: C=AU, ST=WA, O=ExampleCompany, CN=server, emailAddress=example@example.com TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed TLS Error: TLS object ->...
Technical Blog
If your Mock builds are complaining about perl locales, like perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "en_US:en", LC_ALL = (unset), LANG = "en_US.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). you can fix or work around this in a number of ways: Manually pre-install glibc...
Technical Blog
I’m pleased to say that Postgres-BDR is on its way to PostgreSQL 9.6, and even better, it works without a patched PostgreSQL. BDR has always been an extension, but on 9.4 it required a heavily patched PostgreSQL, one that isn’t fully on-disk-format compatible with stock community PostgreSQL 9.4. The goal all along has been to allow it to run as an extension on an unmodified PostgreSQL … and now we...
Technical Blog
I’m pleased to say that we’ve just released Postgres-BDR 1.0, based on PostgreSQL 9.4.9. This release contains significant improvements to DDL replication locking, global sequences, documentation, performance, and more. It also removes the deprecated UDR component in favour of pglogical. The release announcement on the pgsql-announce mailing list Postgres-BDR 1.0 release notes Installation...