Sign in

Franck Pachot

@franckpachot.bsky.social
1.1K followers 327 following 481 posts

Developer Advocate at Microsoft (PostgreSQL on Azure), developer-focused expertise in databases, like 🐘 PostgreSQL, 🚀 YugabyteDB, 🍃 MongoDB, 🅾️ Oracle (Certified Master), and 🔶 AWS Data Hero

PostsRepliesMedia
Franck Pachot @franckpachot.bsky.social · 29/09/2026
Another DocumentDB for PostgreSQL optimization by Microsoft: pushing the $sort into the $group accumulator, so groups stream directly from the index lnkd.in/p/ewAiFyEa
lnkd.in
DocumentDB 0.116: $sort $group prefix pushdown
A common MongoDB pattern: $sort by a key, $group by the same key, and take the $first value per group. With an index on that key, the rows already arrive in the right order. You don't want to sort or ...
020
Franck Pachot @franckpachot.bsky.social · 29/09/2026
I've created an example demonstrating how to combine semantic and spatial distances using Hybrid vector (DiskANN) + location (PostGIS) search on HorizonDB: techcommunity.microsoft.com/blog/adforpo...
techcommunity.microsoft.com
PostGIS and AI Retrieval in Azure HorizonDB | Microsoft Community Hub
Two Ways to Ask One Database: PostGIS and AI Retrieval in Azure HorizonDB Fleet operators rarely search with a single kind of question. Sometimes they know...
020
Franck Pachot @franckpachot.bsky.social · 24/09/2026
New blog series: DocumentDB (MongoDB compatibility on PostgreSQL) performance deep dives. Starting with $group, covering distinct index scans—comparing with MongoDB execution plans: dev.to/franckpachot...
dev.to
DocumentDB 0.116: $group distinct scan
I previously covered MongoDB’s DISTINCT_SCAN for first/last-per-group queries. DocumentDB 0.116...
110
Franck Pachot @franckpachot.bsky.social · 24/09/2026
Finally, PostgreSQL 19 will transform NOT IN to NOT EXISTS whenever NOT NULL constraints ensure they produce the same result, much like many other databases already do. This change allows the query planner to take advantage of all anti-join methods: dev.to/franckpachot...
dev.to
NOT IN can be executed as an Anti-Join (NOT EXISTS) in PG19
Most databases transform a NOT IN query to NOT EXISTS when possible, because the semantic is the same...
000
Franck Pachot @franckpachot.bsky.social · 23/09/2026
At PGConf EU, I'll demo some PG19 features. One of them is enabling checksums online. Always fun to reproduce some data corruption and see how it is detected: dev.to/franckpachot...
dev.to
Online enabling checksums in PostgreSQL 19
Enabling data checksums is strongly advised to identify corruption originating from the storage or...
000
Franck Pachot @franckpachot.bsky.social · 21/09/2026
In PostgreSQL 19, you'll get much deeper insight into asynchronous I/O and prefetching with EXPLAIN (ANALYZE, BUFFERS, IO). I put some math in a new blog post: dev.to/franckpachot... (and I will demo more PG19 stuff at PGConf EU - wrote that while preparing this)
dev.to
EXPLAIN (ANALYZE, IO) in PostgreSQL 19
I'll be showcasing some exciting PostgreSQL work, featuring contributions from Microsoft engineers at...
020
Franck Pachot @franckpachot.bsky.social · 16/09/2026
To learn about GiST indexes, I created a fun little extension that stores dates as MM/DD/YYYY 🤓. Thanks to its extensibility, you can focus on domain logic while PostgreSQL and GiST handle core features like performance, durability, consistency, locking, and recovery.(dev.to/franckpachot...)
dev.to
Learn PostgreSQL extensions through a gloriously bad idea: MM/DD/YYYY
This project teaches four of PostgreSQL's most powerful features by building something no sane person...
010
Franck Pachot @franckpachot.bsky.social · 15/09/2026
A long article on a simple question: when did this row change? Necessary for audits, incremental replication, online migration verification, and incident analysis, but databases don't make it easy. dev.to/franckpachot...
dev.to
When Did This Transaction Happen? PostgreSQL Snapshots, LSNs, Oracle SCNs, and More
When did a database change happen? This isn't just academic. Incremental replication must order...
030
Franck Pachot @franckpachot.bsky.social · 14/09/2026
🍿"No overlapping booking" rule: in the application or the database? www.linkedin.com/pulse/busine...
linkedin.com
Business Rules: Application Logic or Database Constraints? Both.
For once, the answer is not "It depends" but "Both, with different purposes". When people ask whether a business rule belongs in the application or the database, they often mix two responsibilities: A...
010
Franck Pachot @franckpachot.bsky.social · 10/09/2026
PostgreSQL MVCC is often criticized for storing old versions in place. But the question is: does it have to traverse a chain of versions to find the correct row? A new blog post to answer that: dev.to/franckpachot...
dev.to
PostgreSQL MVCC: Why Bloat Doesn't Automatically Mean Expensive Reads
One of the most persistent misconceptions about PostgreSQL MVCC is that old row versions accumulate...
022
Franck Pachot @franckpachot.bsky.social · 08/09/2026
Running PDP-11 on an free @OracleCloud compute VM with 1/8 OCPU and 1 GB memory 🤓 and it's not so slow
170
Franck Pachot @franckpachot.bsky.social · 02/09/2026
The 2026 version of "don't change your slides the hour before your presentation" is "don't vibe code new ideas for your demo application the day before". French saying: the better is the enemy of the good 🤓
000
Franck Pachot @franckpachot.bsky.social · 01/09/2026
What's the difference between INDEX ON T ( A , B ) and INDEX ON T ( A ) INCLUDE ( B ) in PostgreSQL? Both cover a SELECT B FROM T WHERE A = $1 dev.to/franckpachot...
dev.to
PostgreSQL INCLUDE indexes: what problem are they trying to solve?
A common way to explain PostgreSQL's INCLUDE clause is that it helps with index-only scans. That's...
120
Franck Pachot @franckpachot.bsky.social · 31/08/2026
Back from vacation😎A new blog post about #oracle_fdw: read and write Oracle Database from PostgreSQL. Not all cloud-managed services allow it, as it requires the Oracle Call Interface (OCI) client library and some firewall rules. Here on Azure PostgreSQL: techcommunity.microsoft.com/blog/adforpo...
techcommunity.microsoft.com
Connecting Azure PostgreSQL to Oracle Autonomous with ORACLE_FDW | Microsoft Community Hub
When migrating databases to PostgreSQL, not all data transitions happen immediately. Applications often need to keep accessing legacy databases for reading...
020
Franck Pachot @franckpachot.bsky.social · 29/08/2026
While going through an old box of papers, I stumbled upon my résumé from 1999, with my main technical skills listed.
150
Reposted by Franck Pachot
DBAKevlar @dbakevlar.bsky.social · 20/08/2026
New Simple Talks podcast where I get to chat with my old friend, @franckpachot.bsky.social who recently joined Microsoft to help lead their #PostgreSQL initiative! www.youtube.com/watch?v=7iJ3...
youtube.com
Zero downtime: Franck Pachot on his 'migration' from Oracle to PostgreSQL | The Simple Talk Podcast
YouTube video by Redgate Software
041
Franck Pachot @franckpachot.bsky.social · 19/08/2026
dev.to/franckpachot...
dev.to
OrioleDB Multi-Version Concurrency Control
MVCC not only tracks row history but also records the search-key space. To better understand...
000
Franck Pachot @franckpachot.bsky.social · 17/08/2026
The difference between Index Skip Scan and Loose Index Scan: dev.to/franckpachot...
dev.to
Skip Scan vs. Loose Index Scan
Both optimizations avoid (skip) reading (scan) irrelevant leaf pages by repositioning (seek) via a...
010
Franck Pachot @franckpachot.bsky.social · 14/08/2026
This article was created entirely by AI, intentionally 😀 After indexing 15 years of my blog posts with descriptions, I asked for an outside perspective: Have my employers influenced how I write about databases? franckpachot.github.io/pages/analys...
franckpachot.github.io
Did My Employer Change How I Write About Databases?
An AI-driven analysis of database framing across employers and time.
020
Franck Pachot @franckpachot.bsky.social · 14/08/2026
I tried a fully AI-driven approach to migrate a complex database schema with many proprietary features, all within @vscode.dev: DDL, PL/SQL, tests, and documentation (including drafting the blog post): techcommunity.microsoft.com/blog/adforpo...
techcommunity.microsoft.com
Oracle to PostgreSQL in VS Code: Assessment, Conversion, and Validation | Microsoft Community Hub
This article explores the possibilities opened by the Migrations (Preview) workflow. It is an early evaluation, using the source and target systems I...
121
Franck Pachot @franckpachot.bsky.social · 13/08/2026
☁️Cloud means you can bill individual users for resources used. Example for DEC PDP-11: 🤓
120
Franck Pachot @franckpachot.bsky.social · 10/08/2026
Oracle implemented multi-versioning early for non-blocking reads (MVCC) and later added time travel (FDA). PostgreSQL began with multi-versioning for Time Travel, then reused it for Concurrency Control. Today, PostgreSQL's MVCC mainly relies on the 1998 LLL design: dev.to/franckpachot...
dev.to
PostgreSQL Multi-Version: From Time Travel to Concurrency Control
A LinkedIn comment by Oleg Bartunov made me research this history. The comment explained that...
041
Franck Pachot @franckpachot.bsky.social · 07/08/2026
I see users excited by REPACK in PostgreSQL 19 (currently in beta), because it looks like a simple command that reduces table bloat. But it's not that simple. You will need to think about FILLFACTOR twice. Example in a new blog post: dev.to/franckpachot...
dev.to
PostgreSQL 19 REPACK: Choosing the Right FILLFACTOR
I see users excited by REPACK in PostgreSQL 19 (currently in beta), because it looks like a simple...
041
Franck Pachot @franckpachot.bsky.social · 03/08/2026
Disaggregated storage in PostgreSQL shows the same IO stats, but their meanings differ. For example, the Full Page Image has a different purpose. Example in HorizonDB: dev.to/franckpachot....
dev.to
HorizonDB reduces WAL overhead with smarter FPI (full-page image) than traditional PostgreSQL
Azure HorizonDB exposes the familiar PostgreSQL statistics views because it is fully compatible with...
010
Franck Pachot @franckpachot.bsky.social · 01/08/2026
🛢️ A searchable index of all the blog posts I've published over the past 12 years: franckpachot.github.io/pages/ It's not a live feed. I update it occasionally, so follow me on social media if you'd like notifications whenever I publish something new. 🔔
franckpachot.github.io
Database Blog Posts by Franck Pachot
Explore 1,200+ database blog posts about PostgreSQL, Oracle Database, MongoDB, YugabyteDB, SQL, NoSQL, performance, and distributed systems.
030
Franck Pachot @franckpachot.bsky.social · 31/07/2026
📎"Summoning Clippy" in my @microsoft-copilot.bsky.social output made my day!
000
Franck Pachot @franckpachot.bsky.social · 29/07/2026
Did you know that SQL's NULL and PL/SQL's NULL are unrelated? Like: EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- not needed in PostgreSQL plpgsql END; www.linkedin.com/posts/franck...
linkedin.com
#postgresql | Franck Pachot
In #PostgreSQL PL/pgSQL, you can write: EXCEPTION WHEN NO_DATA_FOUND THEN END; If you've written Oracle PL/SQL, you've probably used the NULL statement because PL/SQL doesn't allow an empty ...
000
Franck Pachot @franckpachot.bsky.social · 28/07/2026
I've explored how to build a complete retrieval workflow in HorizonDB, combining BM25, ANN vector search, AI pipelines, and AI Functions to generate, extract, index, retrieve, and rank information. The full walkthrough on the Microsoft for PostgreSQL blog: techcommunity.microsoft.com/blog/ADforPo...
techcommunity.microsoft.com
AI-Powered Retrieval in PostgreSQL with Azure HorizonDB | Microsoft Community Hub
Developers need flexible, efficient item searches by description. Using a Wikipedia movie dataset, I started with full-text search, then created embeddings...
010
Franck Pachot @franckpachot.bsky.social · 27/07/2026
Do you write generic predicates like: WHERE p1 IS NULL OR "col" > p1 Don't do that in PostgreSQL! If you use prepared statements, be sure to force custom plans. If you use hardcoded values, be sure the predicate is sargable. Examples in a new blog post: dev.to/franckpachot...
dev.to
WHERE $1::timestamptz IS NULL OR "timestamp" > $1
SQL is quite flexible, making it easy to write a single query that works for two situations: one...
000
Franck Pachot @franckpachot.bsky.social · 27/07/2026
The databases' trade-offs are fascinating. Is the unique index key truly unique within the B-tree? How do they handle temporary violations during large updates? Can they ignore them until the end? Can they report which key value was a duplicate? dev.to/franckpachot...
dev.to
Following ROWIDs Through an Oracle Unique Index Update
I've always been amazed by how Oracle Database handles updates to a unique column—performing...
021
Franck Pachot @franckpachot.bsky.social · 23/07/2026
New blog post on PostgreSQL's fast root optimization for B-tree, featuring handy tools like explain analyze, pageinspect, and pgstattuple: dev.to/franckpachot...
dev.to
B+tree height after delete: PostgreSQL fastroot
Many databases use B+tree indexes, but they all differ. It's a sorted structure. The leaf pages are...
021
Franck Pachot @franckpachot.bsky.social · 22/07/2026
Another approach for graph database workloads: property graph queries on top of SQL tables: dev.to/franckpachot...
dev.to
From Joins to Graph Edges: SQL/PGQ in PostgreSQL 19
In the previous post, Cypher graph queries on PostgreSQL with Apache AGE, I showed how to model and...
010
Reposted by Franck Pachot
Jesús Espino @jespino.bsky.social · 21/07/2026
3 months ago I published my book "Deep dive into a SQL query" (leanpub.com/deep-dive-in...), and probably the text that explain better what is the target audience is the foreword from @franckpachot.bsky.social, so I'll just share it here:
032
Franck Pachot @franckpachot.bsky.social · 21/07/2026
A new blog post showing graph queries on PostgreSQL with Apache AGE: dev.to/franckpachot... (tested on Azure HorizonDB preview)
dev.to
Cypher graph queries on PostgreSQL with Apache AGE
The cover image above compares two representations of the same data model, separated by more than 45...
021
Franck Pachot @franckpachot.bsky.social · 10/07/2026
A new blog post using Ismael Mejía's pglayers-full image to showcase multi-model PostgreSQL (including a MongoDB-compatible text index): dev.to/franckpachot...
dev.to
PostgreSQL as a converged database with pglayers-full
PostgreSQL is extensible, allowing it to serve as a multi-model or converged database with built-in...
010
Franck Pachot @franckpachot.bsky.social · 09/07/2026
🐘 Do you think unique indexes have unique keys? Not in PostgreSQL. 🤓 Let's PageInspect heap and index tuples in a new blog post: dev.to/franckpachot...
dev.to
“PostgreSQL resolves uniqueness through heap tuple visibility”
I recently commented on Jonathan Lewis’s blog, Savepoint Funny, where I compared how PostgreSQL...
030
Franck Pachot @franckpachot.bsky.social · 08/07/2026
Index bloat is not a PostgreSQL-only problem. It's common to MVCC and B-tree indexes, though the scope may differ. Here's a demo on Oracle: www.linkedin.com/posts/franck...
linkedin.com
🐘 If you claim that PostgreSQL index bloat is a problem and that Oracle Database performs better, I may agree—only if you demonstrate a clear understanding of the topic 🤓 MVCC with B-Trees is… | Franc...
🐘 If you claim that PostgreSQL index bloat is a problem and that Oracle Database performs better, I may agree—only if you demonstrate a clear understanding of the topic 🤓 MVCC with B-Trees is extremel...
020
Franck Pachot @franckpachot.bsky.social · 06/07/2026
🙋 Should query planner parameters in #PostgreSQL be set for PREPARE or EXECUTE when using prepared statements? 🙋In EXPLAIN (SETTINGS), does the plan reflect the parameters in the "Settings" section? 👉 New blog post: dev.to/franckpachot...
dev.to
PostgreSQL query planner parameters and prepared statements
PostgreSQL provides several planner configuration parameters, such as enable_seqscan and...
0130
Franck Pachot @franckpachot.bsky.social · 03/07/2026
PostgreSQL really shines with its extensibility and wide range of index types. The Extended RUM extension, created by Microsoft, turns PostgreSQL into a DocumentDB. It's open source, and here's how it works: dev.to/franckpachot...
dev.to
Extended RUM in DocumentDB: B-tree-like ordered scans for flexible BSON in PostgreSQL
The main challenge in document database indexing is the flexibility of fields: the same path can be a...
010
Franck Pachot @franckpachot.bsky.social · 02/07/2026
After examining PostgreSQL's io workers managing read queues with pread64() or preadv(), here's "io_uring" eliminating the need for userspace workers since Linux handles asynchronous buffered reads dev.to/franckpachot...
dev.to
kernel asynchronous reads in PostgreSQL 19 (io_uring)
In the previous post, I executed a query that benefits from Asynchronous Sequential Scan. Although...
020
Franck Pachot @franckpachot.bsky.social · 01/07/2026
Can PostgreSQL perform multi-block reads to reduce system calls? Yes, it's coming in PG19 with IO combine prefetching. What about TOASTed documents? Here's a new blog post: dev.to/franckpachot...
dev.to
Multi-block buffered reads in PostgreSQL 19 (IO combine & prefetch)
PostgreSQL scans operate at the page level: the buffer manager fetches one 8 KB page (BLCKSZ) at a...
013
Franck Pachot @franckpachot.bsky.social · 30/06/2026
Combining BM25 search with ANN vector similarity in a single SQL query in PostgreSQL: a demo of hybrid search with Reciprocal Rank Fusion (RFF) on HorizonDB in a new blog post - the truth is in the execution plans 🤓 dev.to/franckpachot...
dev.to
Hybrid Search (Full-Text and Vector Similarity) in HorizonDB
You may have read about Hybrid search for Azure HorizonDB. It is presented as combining BM25...
020
Franck Pachot @franckpachot.bsky.social · 29/06/2026
An example using AI models within SQL queries to generate, extract, classify, and rank data in HorizonDB, the disaggregated storage database service for PostgreSQL on Microsoft Azure, in a new blog post: dev.to/franckpachot....
dev.to
Azure AI on HorizonDB (Microsoft Foundry Azure OpenAI from SQL)
The azure_ai extension on HorizonDB adds generative AI functions to PostgreSQL, allowing users to...
100
Franck Pachot @franckpachot.bsky.social · 26/06/2026
DocumentDB: $lookup - Nested Loop or Hash Join? New blog post: dev.to/franckpachot... 🍃DocumentDB is an open source extension by @microsoft.com which enables BSON and Multi-Key RUM indexes in PostgreSQL 🐘
dev.to
$lookup join strategies: understanding the trade-offs with flexible documents
In a previous post, I explored how MongoDB chooses between nested loop, indexed loop, and hash join...
000
Franck Pachot @franckpachot.bsky.social · 25/06/2026
I tested Oracle Foreign Data Wrapper on Microsoft Azure's PostgreSQL after receiving a question about its support. It was straightforward. You can find the details in this blog: dev.to/franckpachot...
dev.to
Oracle FDW on Azure Database for PostgreSQL
When migrating from Oracle Database to PostgreSQL, the Oracle Foreign Data Wrapper enables PostgreSQL...
030
Franck Pachot @franckpachot.bsky.social · 22/06/2026
In PostgreSQL managed services on Azure, you can index your embeddings with #pgvector or #DiskANN. I compared and explored DiskANN pre-filtering and cost-based optimization in a new blog post: dev.to/franckpachot...
dev.to
Vector Search with Filters: pgvector vs DiskANN on HorizonDB
In a previous post, I explained that using filtering with pgvector can decrease recall in approximate...
000
Franck Pachot @franckpachot.bsky.social · 17/06/2026
What if PostgreSQL could give you local NVMe performance like “metal” and resilient, elastic cloud‑native storage like “disaggregated” at the same time? I ran an experiment in which a seq scan shows how HorizonDB layers RAM, SSD cache, and remote storage: dev.to/franckpachot...
dev.to
HorizonDB cache hierarchy: RAM, NVMe SSD, and multi-AZ storage behind PostgreSQL
HorizonDB extends PostgreSQL with disaggregated storage, making it appear to developers like...
130
Franck Pachot @franckpachot.bsky.social · 12/06/2026
Want to test HorizonDB's PostgreSQL compatibility? Here's how I quickly spin up and down HorizonDB preview using Microsoft Azure Resource Manager templates: dev.to/franckpachot...
dev.to
HorizonDB preview: automate a reproducible lab with ARM
Azure HorizonDB is a new database service on Azure. It is PostgreSQL-compatible from a developer...
010
Franck Pachot @franckpachot.bsky.social · 09/06/2026
Kicking off a series on inverted indexes in PostgreSQL: GIN and RUM! dev.to/franckpachot...
dev.to
GIN: Understanding PostgreSQL's Inverted Index and Its Limitations
This series of posts traces the evolution from GIN to RUM to Extended RUM, showing how a single...
020
Franck Pachot @franckpachot.bsky.social · 08/06/2026
New blog post! Revisiting an old test shows that Extended RUM now overcomes the RUM/GIN index limitation, thanks to Microsoft for PostgreSQL’s work on the PostgreSQL extension. dev.to/franckpachot...
dev.to
Extended RUM in DocumentDB extension for PostgreSQL: Efficient ESR (Equality, Sort, Range) Queries
Last year, I examined RUM indexes within this series on multi-key indexing, demonstrating that they...
020