Phil Eaton
EDB Staff Engineer
Phil Eaton is a Staff Engineer at EDB; contributing to EDB's highly available Postgres offering, Postgres Distributed. In the past 10 years he's been a developer, a manager, and a cofounder at infrastructure companies. Outside of work he runs the NYC Systems talk series, the Software Internals Discord, the NYC Systems Coffee Club, the /r/databasedevelopment subreddit, and various technical book clubs.
Read Blogs
EDB Labs
I noticed that psql supports setting variables ( \set for literals and \gset for query results) and conditional blocks ( \if ). It also supports loops (with \watch ) and recursion of sorts (with \include ). Can we express any computation in psql's scripting language? Kinda sounds like it. This post is for fun. Don't do this. But it happens to also be a nice introduction to some intermediate usage...
Technical Blog
Postgres gives each connecting client its own process called a client backend . And either because of concerns about 1) resource contention or 2) latency or 3) both, we users tend to limit the maximum number of client connections to a few hundred. Then we introduce connection poolers like pgbouncer or pgcat . These poolers can handle more connections (with lower latency) by transparently...
Technical Blog
We've got this new CLI for EDB Postgres Distributed (PGD) that makes creating clusters of PGD nodes pretty easy. PGD nodes are Postgres instances with PGD metadata, all connected and talking to each other, doing logical replication of DDL (structures) and DML (data). The PGD philosophy is also pretty cloud-native in that if something goes wrong with a node we can just delete it and recreate it and...
EDB Labs
EDB Postgres Distributed (PGD), under the product umbrella of EDB Postgres AI, supports seamlessly 1) replicating data to an analytics data format ( Iceberg) and 2) running regular Postgres queries against this data with EDB Postgres Analytics Accelerator (PGAA) which uses Apache DataFusion under the hood. In this post we'll set up a PGD cluster and run a basic analytics query against a business...
Technical Blog
Log in or register for a free EDB account and grab your subscription token. Export it in your environment: $ export EDB_SUBSCRIPTION_TOKEN=whatever-it-is Now set up repositories for EDB Postgres Distributed (PGD) and EDB Postgres Extended (EDB's distribution of Postgres). $ curl -1sLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/postgres_distributed/setup.deb.sh" | sudo -E bash $...
Technical Blog
If Postgres crashes you can get a stack trace with gdb. But how do you debug errors that don't crash Postgres? Let's grab the Postgres 17 source and build it with debug symbols. $ git clone https://github.com/postgres/postgres $ cd postgres $ git checkout REL_17_STABLE $ ./configure --enable-debug --without-icu \ --prefix=$(pwd)/build \ --libdir=$(pwd)/build/lib $ make -j16 && make install Create...
Technical Blog
I've been talking about debugging memory leaks for more than a year now; covering Valgrind, AdressSanitizer, memleak, and heaptrack. But there are still a few more tools to explore 1 and today we're going to look at jemalloc, the alternative malloc implementation from 2 Meta. Alternative malloc implementations are popular and practical. Google has tcmalloc, Microsoft has mimalloc, and Meta has...
Technical Blog
In this post we'll introduce two memory leaks into Postgres and debug them with heaptrack. Like almost every memory leak tool available to us (including memleak which I wrote about last time), heaptrack requires you to be on Linux. But a Linux VM on a Mac is fine too (that is where I'm running this code from). Although we use Postgres as the codebase with which to explore tools like memleak (last...
Technical Blog
In this post we'll set up a 3-node EDB Postgres Distributed (PGD) cluster running community Postgres 16. Then we'll upgrade the entire cluster in place from Postgres 16 to Postgres 17. We'll demonstrate that even while bringing individual nodes down for the major version upgrade, the cluster overall will remain available for reads and writes. There may be nuances to your particular environment...
EDB Labs
The latest generation of programming languages (Rust, Go, Zig) come bundled not just with a standard library but with a suite of first-party tools for working with the code itself (e.g. cargo fmt, gofmt, zig fmt, etc.). But I suspect that some future generation of (statically typed) programming languages will also come with a first-party embedded scripting language to make it easier to write tests...