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
PostgreSQL’s manual is generally pretty clear about the locks taken by various operations – but nothing’s perfect. If you need to, you can also ask PostgreSQL directly. You can check lock levels trivially with psql or PgAdmin. For example, to see what lock alter table some_table disable trigger some_trigger; takes: test=> BEGIN; BEGIN test=> ALTER TABLE some_table DISABLE TRIGGER some_trigger...
Technical Blog
Goldfields Pipeline, by SeanMac ( Wikimedia Commons)If you’re trying to optimise the performance of your PostgreSQL-based application you’re probably focusing on the usual tools: EXPLAIN (BUFFERS, ANALYZE), pg_stat_statements, auto_explain, log_statement_min_duration, etc. Maybe you’re looking into lock contention with log_lock_waits, monitoring your checkpoint performance, etc too. But did you...
Technical Blog
Having recently been doing some debugging work where many watchpoints, conditional breakpoints etc were necessary I’d like to shout out to a really useful tool: The standalone CDT debugger. It’s part of the Eclipse project, but before you run screaming – it doesn’t require project setup or anything and it serves as a good GUI gdb wrapper. It’s good for working with PostgreSQL because you don’t...
Technical Blog
There are a lot of amazing features coming in PostgreSQL 9.6, but I’m personally very happy about a really small, simple one that helps close a long-standing user foot-gun. commit a31212b429cd3397fb3147b1a584ae33224454a6 Author: Robert Haas Date: Wed Apr 27 13:46:26 2016 -0400 Change postgresql.conf.sample to say that fsync=off will corrupt data. Discussion: 24748.1461764666@sss.pgh.pa.us Per a...
Technical Blog
If you try to create an LVM snapshot with lvm lvcreate -s -n snapname -L 100G myvg and it fails with Unable to create a snapshot smaller than 2 chunks. … it’s probably actually trying to tell you “I don’t have 100GB free on this VG, allocate a smaller snapshot”. It’s choosing to phrase it creatively. You’ll only get this error if you’re within a certain margin of sizes: much too big and it’ll tell...
Technical Blog
PostgreSQL 9.5 adds declarative row security. You can declare policies on tables and have them enforced automatically – for example, allowing user joe to only see rows with the owner column equal to joe. This is a great feature, and it’s been a long time coming. It didn’t make it into PostgreSQL 9.4, but automatically updatable security_barrier views did. They and LEAKPROOF functions form part of...
Technical Blog
My colleagues and I are often asked “when will you (2ndQuadrant) contribute BDR to PostgreSQL?” This makes an interesting assumption: that we have not already done so. We have. Much of BDR has already been contributed to core PostgreSQL, with more to come. All of BDR is under the PostgreSQL license and could be merged into PostgreSQL at any time if the community wished it (but it doesn’t and...
Technical Blog
Version 0.9.2 of the BDR (Bi-Directional Replication) extension for PosgreSQL has been released. This is a maintenance release in the current stable 0.9.x series, focused on bug fixes, stability and usability improvements. In particular bdr_init_copy, the pg_basebackup-based node bring-up tool, is significantly improved in this update. This release also updates the BDR-patched version of...