TechReaderDaily.com
TechReaderDaily
Live
Databases · Data Infrastructure

Postgres Extensions Are Devouring the Database Stack

Postgres extensions like pgvector, pg_search, and Citus are not just features but proof that Postgres's extension API is now the most valuable piece of the database stack, spawning a new generation of database companies.

ParadeDB co-founders at their office, part of the new wave of companies building search and analytics as Postgres extensions rather than standalone databases. ParadeDB co-founders
In this article
  1. The Economics of the Extension Layer
  2. What to Watch

In September 2025, the PostgreSQL 18 release notes contained a line that would have been unremarkable a decade ago: the extension framework was gaining a new hook, one that allowed extensions to participate in the planner's selectivity estimation for custom index access methods. For most database users, this is the kind of internal plumbing detail that never surfaces in a release announcement. But for the companies now betting their entire product strategy on Postgres extensions, that hook is a load-bearing beam. It means that an extension like pg_search, which implements full-text search via a custom BM25 index, can now give the query planner accurate enough cardinality estimates that Postgres chooses a bitmap index scan over a sequential scan at exactly the right threshold, without the extension author needing to hard-code heuristics that break at 10 million rows.

The extension API, first shipped in Postgres 9.1 in 2011, was originally conceived as a packaging mechanism, a cleaner way to distribute contrib modules like hstore and pgcrypto without recompiling the server. What it has become, three decades into Postgres's life, is the substrate for an entirely new kind of database company. Rather than forking the source and maintaining a divergent codebase, or building a wire-compatible alternative from scratch, these companies ship a CREATE EXTENSION command and a shared library, and they run inside the same process space as the Postgres you already operate. The business proposition is deceptively simple: you never move your data, you never learn a new query language, and you never manage a second stateful service. As Rebecca Szkutak reported at TechCrunch in July 2025, the thesis has attracted serious venture attention, ParadeDB, the company behind pg_search, frames its entire competitive argument against Elasticsearch around the cost and operational complexity of running a separate search cluster.

The most visible proof point of the extension economy is pgvector. What began as a modest open-source project by Andrew Kane in 2021, a single C extension adding a vector data type and an IVFFlat index, has become, by any reasonable measure, the default vector store for the AI application layer. It ships as a managed offering on every major cloud Postgres service. Supabase, Neon, Tembo, and Nile all treat it as table stakes. The reason is not that pgvector is the fastest approximate nearest-neighbor implementation, it is not, and on pure recall-versus-latency benchmarks, purpose-built vector databases like Qdrant and Weaviate still hold a measurable lead on billion-scale datasets. The reason is that most vector workloads never reach billion-scale. They reach a few million embeddings, at which point the difference between an HNSW index in pgvector and a purpose-built engine is measured in single-digit milliseconds, and the cost of that latency is dwarfed by the cost of maintaining a separate vector database with its own authentication, backup regimen, and on-call runbook.

What tends to get lost in the vector-database discourse is that pgvector succeeded not because it solved vector search, but because it solved the operational problem that vector search creates when it lives somewhere else. If your embeddings live in Pinecone but your customer metadata lives in Postgres, every hybrid query, "find documents semantically similar to this query, but only those authored by users in the enterprise tier who logged in this week", becomes a distributed join across two systems with no shared transaction semantics. You can pre-filter, you can post-filter, you can build elaborate syncing pipelines; all of them break under enough concurrency or enough data skew. pgvector sidesteps the entire problem by keeping the vectors in the same row as the metadata they describe, which means a single SELECT with a WHERE clause and an ORDER BY embedding <=> does what three microservices and a message queue would otherwise have to do.

The same logic propelled pg_search into the market. ParadeDB's extension, which implements the BM25 scoring algorithm directly inside Postgres using the index access method API, is not the first attempt to put full-text search inside the database, Postgres has had built-in tsvector and GIN-indexed text search for over two decades. But tsvector is a linguistic tool built for document retrieval circa 2002; it does not do relevance tuning, it does not handle faceted search well, and its ranking functions are rudimentary compared to what Lucene-based engines have spent twenty years refining. pg_search ports those二十年 of relevance-ranking research into a Postgres-native index, which means the search index lives inside the same write-ahead log that streams to your read replicas. There is no separate consistency model to reason about. When a transaction commits, the search index is updated; when it rolls back, the index change is discarded. This is not a performance argument, it is a correctness argument, and it is the kind of argument that platform engineers at high-scale shops tend to find persuasive after their second Elasticsearch resynchronization incident.

Citus, acquired by Microsoft in 2019, represents a different branch of the extension economy, one that extends Postgres not vertically into new data types and index strategies, but horizontally across many machines. The Citus extension transforms a single Postgres node into a coordinator for a cluster of worker nodes, sharding tables across them by a distribution column and pushing down as much of the query as possible to the workers. What makes Citus architecturally interesting is not that it distributes Postgres, several companies have tried that, but that it does so without forking the wire protocol or the SQL dialect. A Citus cluster accepts standard Postgres queries from standard Postgres clients. The extension intercepts the query at the planner level, rewrites it into a distributed plan, and assembles the results. At 1 TB, this feels like magic; at 10 TB, the distribution column choice becomes the single most consequential schema decision you will ever make, and getting it wrong means repartitioning under load, which Citus can do online but not painlessly.

In November 2025, Microsoft extended the Citus lineage into a managed service called Azure HorizonDB, which InfoWorld covered as a direct competitive move against CockroachDB and YugabyteDB in the distributed Postgres market. HorizonDB wraps Citus's sharding logic in an Azure-native control plane with automatic rebalancing, point-in-time restore across shards, and a global routing layer that the company claims delivers 100 percent Postgres compatibility. The claim is worth scrutinizing, because "100 percent compatibility" in a distributed database is a phrase that usually comes with footnotes about which extensions work, which transaction isolation levels degrade under partition, and which pg_catalog queries return cluster-wide rather than node-local results. The footnotes matter, and they are what distinguish a managed service announcement from a production deployment that survives a regional failover at 3 a.m.

The Economics of the Extension Layer

If the technical argument for the extension model is strong, the economic one is still being negotiated in real time. The core challenge is that an extension sits in an awkward zone of the open-source business model: it is not the database itself, so it cannot charge what a database company charges, but it is more deeply integrated than a standalone service, so it cannot easily extract value through a separate pricing tier. The companies that have found traction, TimescaleDB with time-series, ParadeDB with search, Citus with distribution, have each converged on a similar pattern: the extension is open source, the management layer is proprietary, and the cloud service is where margin lives. TimescaleDB Enterprise, launched by Tiger Data in April 2026, is the latest iteration of this thesis: a commercially licensed, self-managed build for customers who cannot use the cloud but will pay for a hardened distribution with support guarantees.

There is a subtler economic question that few extension companies discuss openly: who bears the maintenance cost when the upstream Postgres release cycle breaks the extension's assumptions? The Postgres 18 release, detailed by Tom Kincaid at InfoWorld, introduced asynchronous I/O for heap scans, OAuth-based authentication, and the expanded extension hooks I mentioned at the start. Each of those changes is a gift and a tax. The async I/O subsystem, for instance, rewrites how Postgres reads pages from disk, and any extension that has its own custom scan node, as pg_search and Citus both do, needs to test whether its scan logic still behaves correctly when the underlying I/O path no longer blocks on pread. The Postgres core team does not test third-party extensions before shipping a major release; the extension authors do, and the lag between a Postgres GA and full extension compatibility can stretch for months.

This lag is not a theoretical concern. In the 2024-2025 cycle, pgvector users running on managed services encountered a version skew where the cloud provider had upgraded to Postgres 17 but the extension had not yet been rebuilt against the new ABI, leaving vector indexes in an unreadable state until the provider pushed an updated binary. The incident, which affected a single-digit percentage of instances across two major clouds, resolved within 48 hours, but it exposed a structural dependency: when your database is Postgres and your vector store is an extension, your vector store's release cadence is coupled to your database provider's operational schedule, not to your own. For most teams, this is an acceptable tradeoff relative to managing a separate vector database. For teams with hard latency SLOs on their RAG pipelines, it is a risk that needs to be priced into the architecture decision.

The extension economy also raises questions about the Postgres core project's governance. No single entity controls which extensions become ubiquitous; the market decides through adoption, and the cloud providers decide through inclusion in their managed services. But there is an asymmetry: an extension that ships by default on Amazon RDS, Azure Database for PostgreSQL, and Google Cloud SQL reaches a distribution that no independent company can match through its own sales motion. pgvector achieved this. pg_cron achieved this. postgres_fdw achieved this by being part of the contrib tree. The question is whether an extension that competes with a cloud provider's own service, imagine a Postgres-native queuing extension that threatened Amazon SQS revenue, would receive the same treatment. The historical record is mixed, and it is the kind of question that venture capitalists ask founders before writing a check.

The best extensions don't try to turn Postgres into something it isn't. They take something Postgres already does well, reliable storage, concurrent access, transactional consistency, and extend it along a dimension the core project decided not to pursue.

What does this architecture look like under failure, not under demo? The answer depends on which extension and which failure mode. For pgvector, the most common production failure is not a crash but a quiet degradation: the HNSW index grows stale because the m and ef_construction parameters were set too low at creation time, and by the time the table reaches 50 million rows, recall has dropped below 0.7 without anyone noticing. Rebuilding the index requires a full table scan and a write lock that can hold for hours. For pg_search, the failure mode that keeps operators awake is the interaction between BM25 scoring and Postgres's MVCC visibility rules: a long-running transaction can prevent vacuum from cleaning up dead tuple versions in the search index, causing the index to bloat until it exceeds available disk. For Citus, the canonical failure is the distributed deadlock, where two transactions on different worker nodes each hold locks the other needs, and the coordinator's deadlock detector, which relies on pg_blocking_pids calls across the cluster, arrives at a resolution after the client's TCP timeout has already fired.

The aging question is equally instructive. How does pgvector behave at 1 GB of embeddings, at 1 TB, at 1 PB? At 1 GB, everything works; the HNSW graph fits in memory, index builds complete in seconds, and queries return in under a millisecond. At 1 TB, the graph no longer fits in memory, and the operating system's page cache becomes the silent performance determinant, a cold start after a reboot can mean minutes of random I/O before latency returns to baseline. At 1 PB, you are beyond what a single Postgres instance can reasonably store, and you need either horizontal sharding (which pgvector does not natively support) or an architectural rethink that partitions embeddings by tenant or namespace. The extension does not solve the scaling problem; it inherits Postgres's scaling limits, and it is honest about them in a way that some vector database marketing is not.

What to Watch

The next twelve months will test whether the extension economy can sustain its momentum or whether it consolidates around a small number of winners backed by hyperscaler distribution. Three signals are worth monitoring. First, the Postgres 19 development cycle, which will debate a proposal to stabilize the extension ABI, a change that would decouple extension binary compatibility from Postgres major versions and remove the version-skew risk that bit pgvector users in 2024. If it lands, the extension model becomes dramatically more viable for enterprises running self-managed Postgres across heterogeneous environments. Second, the competitive response from standalone database vendors, several of whom are now shipping their own Postgres-compatible protocol layers as a hedge, not because they believe the protocol compatibility matters to most buyers, but because they need an answer to the procurement question, "Why can't we just use a Postgres extension?" Third, and most consequential, the question of whether the cloud providers begin to bundle extensions into proprietary Postgres distributions that are not available outside their platforms.

The extension economy is not a new idea. Oracle had cartridges; MySQL had storage engines; SQL Server had CLR assemblies. Each of those extension mechanisms eventually became either a compatibility graveyard or a security boundary that nobody trusted to run third-party code. What makes the Postgres extension story different is timing and ecosystem alignment. The extensions that are winning, pgvector for vectors, pg_search for full-text, Citus for distribution, are winning not because they are technically superior to standalone alternatives in a head-to-head benchmark, but because they eliminate a whole category of operational work that engineers at growing companies have learned to dread: moving data between systems, maintaining consistency across stores, and debugging production incidents where the search cluster and the primary database disagree about what a committed transaction contains. That operational argument is durable in a way that benchmark results are not, and it will outlast the current AI hype cycle. The database industry has spent forty years learning that data gravity is real. The extension economy is the first architecture that treats that lesson as a design principle rather than a marketing slogan.

Read next

Progress 0% ≈ 11 min left
Subscribe Daily Brief

Get the Daily Brief
before your first meeting.

Five stories. Four minutes. Zero hot takes. Sent at 7:00 a.m. local time, every weekday.

No spam. Unsubscribe in one click.