Franck PachotDatabase Developer Advocate

Hands-on notes about SQL, NoSQL, database internals, performance, and distributed systems. About me

1,204 publications · 2014–2026

Database field notes

Database articles by Franck Pachot

Search practical research on PostgreSQL, Oracle Database, MongoDB, YugabyteDB, distributed databases, migrations, query performance, and the systems around them.

Database field guides · 31 volumes The Minibook Collection AI-generated field guides based on Franck Pachot's archived blog posts, with links to the original articles. Browse all minibooks →

Publication history

Articles by year

Publication index

1,204 results

WHERE $1::timestamptz IS NULL OR "timestamp" > $1

A single PostgreSQL prepared statement with WHERE $1 IS NULL OR ts > $1 serves both the first unfiltered page and cursor-paginated pages, replacing MongoDB's two separate query branches.

Dev.to
B-tree block split: what's the impact?

Inserting rows one at a time into a PostgreSQL B-tree while tracking EXPLAIN buffers, WAL, and pageinspect/pgstattuple output reveals exactly when pages split and the tree gains a level.

Dev.to
B+tree height after full delete: PostgreSQL fast root

After deleting every row from a table, PostgreSQL's B-tree index collapses back to a single-page root via its fast-root optimization instead of keeping the multi-level structure built during inserts.

Dev.to
From Joins to Graph Edges: SQL/PGQ in PostgreSQL 19

PostgreSQL 19's SQL/PGQ defines a property graph as a query-time semantic layer over existing EMP/DEPT-style relational tables, unlike Apache AGE which materializes vertices and edges as stored data.

Dev.to
The Myth of Strong Relationships in Relational Databases

Clarifies that relational means mathematical relations rather than business relationships, and argues normalization removes structural associations that foreign keys, joins, and transactions must then reconstruct.

LinkedIn
Cypher graph queries on PostgreSQL with Apache AGE

The Apache AGE extension lets PostgreSQL run Cypher queries over an EMP/DEPT hierarchy, tracing graph traversal back through Oracle's 1980s CONNECT BY syntax and SQL's recursive WITH clause.

Dev.to
DocumentDB on YugabyteDB

YugabyteDB 2026.1 previews the DocumentDB extension for MongoDB compatibility, launched via preview flags in a Docker container, though it still lacks secondary indexes and ARM support.

Dev.to
PostgreSQL as a converged database with pglayers-full

The ghcr.io/pglayers/pglayers-full Docker image bundles PostgreSQL with a large extension set, including a pre-installed DocumentDB extension exposing a MongoDB-compatible endpoint out of the box.

Dev.to
What happens when a PostgreSQL backend crashes?

Killing one PostgreSQL backend during a pgbench run terminates every other connection too, because shared memory is assumed corrupted, forcing full crash recovery before new connections are accepted.

Dev.to
Oracle FDW on Azure Database for PostgreSQL

Enabling the oracle_fdw wrapper on Azure Database for PostgreSQL only requires listing it in azure.extensions before CREATE EXTENSION, since the service runs community PostgreSQL.

Dev.to
Provision PostgreSQL from VS Code

Walks through using Microsoft's PostgreSQL extension for VS Code to create connections and provision local Docker or managed cloud PostgreSQL instances without leaving the editor.

LinkedIn
PostgreSQL Average Active Sessions Dashboard in VS Code

Uses the PostgreSQL VS Code extension's performance dashboard to visualize average active sessions, wait types, ranked wait events, blockers, and pg_stat_activity details during pgbench contention.

LinkedIn
RUM—Storing More in the Index

RUM, built by Alexander Korotkov and colleagues at Postgres Professional, extends each GIN posting-list entry with an extra datum alongside the TID to fix full-text ranking and ordering performance.

Dev.to
Codd's Connection Trap and Oracle's JOIN TO ONE

Oracle Database 26ai's JOIN TO ONE clause structurally catches Codd's 1970 connection-trap error, where joining suppliers-parts and parts-projects through a shared attribute fabricates spurious facts.

Dev.to
I need a database. What should I use?

Examines how Claude recommends a database, exposing how requirements, prompt framing, training sources, and familiar defaults can bias an apparently reasoned technology choice.

LinkedIn
Anti-Join in MongoDB

A PostgreSQL NOT EXISTS subquery finding users with no paid transactions compiles into a Nested Loop Anti Join plan that short-circuits as soon as one matching transaction row is found.

Dev.to
Mutable BSON and Oracle OSON

Countering an Oracle marketing claim of a '529x' OSON advantage, it clarifies that raw BSON, like protobuf, should instead be compared to MongoDB's in-memory Mutable BSON document structure.

Dev.to
The origins of MongoDB

Internet Archive snapshots of 10gen.com from 2008 show MongoDB originally described as an object-oriented DBMS layer of a larger platform, before the terminology shifted to document-oriented.

Dev.to
MongoDB Query Planner

Unlike DynamoDB or Redis, which drop query planning entirely, MongoDB keeps an empirical multi-planner that trial-runs candidate indexes and reuses the winning plan until it stops being optimal.

Dev.to
Single-Cluster Duality View 🃏

Proposes a Single-Cluster Duality View that keeps data physically together like MongoDB's Single Collection Pattern, unlike DynamoDB single-table design or Oracle/MySQL duality views spanning blocks.

Dev.to
SQL Assertions, ANSI join, and ORA-08697

Oracle AI Database 26ai's new SQL assertions correctly block two concurrent salary-plus-commission updates from exceeding 1150 by waiting on the other transaction, but only without ANSI join syntax.

Dev.to
Consistency boundaries in SQL databases vs. MongoDB

Debunks two myths: MongoDB supports ACID transactions with a serializable document boundary even when sharded, while no SQL database fully abstracts consistency boundaries across columns and ranges.

Dev.to
MongoDB Transaction Performance

Single-document writes in MongoDB already use internal WriteUnitOfWork/RecoveryUnit ACID transactions, so multi-document transactions add memory tracking but aren't uniformly slower.

Dev.to
From Relational Algebra to Document Semantics

Relational algebra requires closure and first-normal-form value atomicity to make query equivalence mathematically derivable, while MongoDB's document model instead embeds ownership directly in shape.

Dev.to
Top-K queries with MongoDB search indexes (BM25)

Reproducing ParadeDB's pg_search benchmark showing GIN falling short of BM25 top-k queries, MongoDB's Lucene-based search indexes solve the same ranking problem across several deployments.

Dev.to
Cartesian product (CROSS JOIN) in MongoDB

Modeling clothing sizes and gender-specific fits as two separate collections shows how $lookup or write-time embedding in MongoDB reproduces a SQL CROSS JOIN's every-combination cartesian product.

Dev.to
Prisma + MongoDB “Hello World”

A minimal Docker setup starts MongoDB as a single-node replica set, required because Prisma's Object Document Mapper relies on MongoDB sessions and transactional behavior unavailable standalone.

Dev.to
Normal Forms and MongoDB

A pizzeria example starting from one manager, one variety, and one area shows normal-form dependencies still apply to MongoDB documents, though the model allows more flexibility applying them.

Dev.to
{ 🌱: "One year !"}

Reflects on a first year at MongoDB after a SQL-focused career, connecting document modeling, distributed systems, storage-engine learning, and independent evidence-based developer advocacy.

LinkedIn
Anti-Pattern: Read Replicas Without Sharding

Shows why adding cascading read replicas before sharding concentrates writes and failover risk on one primary, while early shard boundaries provide independent replication, upgrades, and fault isolation.

LinkedIn
PgBench on MongoDB via Foreign Data Wrapper

Running pgbench -c 50 against MongoDB collections through the mongo_fdw foreign data wrapper, instead of native PostgreSQL tables, stresses lock contention on the shared pgbench_accounts balance row.

Dev.to
BSON vs OSON: Different design goals

BSON is a general-purpose Protobuf-like transport and storage format, while Oracle's OSON embeds metadata so the database can query and navigate JSON fields without a document-database smart driver.

Dev.to
3 Steps to Optimize Your Queries for Speed

An e-commerce order example walks from a normalized MongoDB model to an embedded model, then adds and refines an index, cutting a full collection scan down to reading only the needed documents.

Dev.to
FOR UPDATE SKIP LOCKED in MongoDB

Answering a Reddit question about multi-process document claiming, an optimistic-lock field written per worker lets MongoDB coordinate exclusive document processing without FOR UPDATE SKIP LOCKED.

Dev.to
Adaptive Join in Amazon Aurora PostgreSQL

Amazon Aurora PostgreSQL's adaptive join defers the nested-loop-versus-hash-join decision until execution, similar to MongoDB's multi-planner and Oracle's buffered-row deferred plan selection.

Dev.to