1986 – 2026

PostgreSQL Versions

Every public release of PostgreSQL — from Michael Stonebraker's POSTGRES research project at Berkeley in 1986, through the 1994 Postgres95 fork and the 1996 PostgreSQL rename, to PostgreSQL 18 in September 2025 — with end-of-life dates, current support state, and the major changes per version. Plus the major-feature arcs (MVCC, write-ahead logging, point-in-time recovery, streaming replication, JSONB, declarative partitioning, JIT, MERGE) and the PGDG governance story.

Era & support

Era

POSTGRES — Berkeley research project, 1986–1994 (POSTQUEL query language)
Postgres95 — 1994–1996, the SQL-replaces-POSTQUEL fork
6.x – 9.x — 1997–2017, the dotted-versioning era under the new PGDG name
Modern (10+) — October 2017 onward, integer-major annual cadence

Support

Current — the latest released major
Maintained — receiving minor releases (bug fixes and security)
EOL — past its five-year community-support window

Postgres ships one new major version per year (typically late September / early October); each major receives five years of community support after its initial GA. See postgresql.org/support/versioning for the live policy.

PostgreSQL version table

Version
PostgreSQL 18
Modern
Current
EOL Nov 2030
Sep 25, 2025
Asynchronous I/O subsystem; UUIDv7 support; OAuth 2.0 authentication; virtual generated columns; skip-scan B-tree index lookups.
  • Asynchronous I/O — new io_method setting (worker or io_uring on Linux) lets backends issue concurrent reads, dramatically reducing wait time on cold-cache scans. The single largest backend-architecture change since parallel query.
  • UUIDv7 support — new uuidv7() function generates time-ordered UUIDs, finally giving Postgres a built-in primary-key generator that works as well as MySQL's auto-increment for index locality without giving up UUID portability.
  • OAuth 2.0 authentication — native client/server support for OAuth bearer tokens via the new oauth auth method, alongside existing SCRAM, GSSAPI, and LDAP options.
  • Virtual generated columnsGENERATED ALWAYS AS (...) VIRTUAL, computed at read time rather than stored, and now the default for a new generated column; the stored behavior added in 12 has to be asked for explicitly with STORED.
  • Skip-scan B-tree lookups — the planner can now use a multi-column B-tree index even when the query omits the leading column, by "skipping" through distinct leading-column values. Common pattern in Oracle / SQL Server now lands in Postgres.
  • pg_upgrade now carries optimizer statistics across a major upgrade, ending the post-upgrade ANALYZE stampede; logical-replication improvements (replication of generated columns, conflict logging on subscribers); BUFFERS output is now automatic in EXPLAIN ANALYZE.
  • Latest point release as of this writing: PostgreSQL 18.6 (August 13, 2026), shipped same-day with 17.11 / 16.15 / 15.19 / 14.24 and the 19 Beta 3 build — fixes 28 security vulnerabilities and over 110 bugs. Note the version skip: 18.5 was never released, pulled after a regression was found post-wrap, so 18.4 goes straight to 18.6. Fourteen of the 28 carry the batch's top CVSS v3.1 base score of 8.8. Nine are memory-safety or type-confusion paths to arbitrary code execution — CVE-2026-14664 (regexp heap buffer overflow), CVE-2026-14669 (to_char), CVE-2026-14670 (plperl tied objects), CVE-2026-14676 (pg_stat_statements), CVE-2026-19385 (pg_dump), CVE-2026-14671 (refint plan-cache type confusion), CVE-2026-14680 (type confusion via internal arguments), CVE-2026-16238 (pg_restore_attribute_stats()), and CVE-2026-16239 (cursor CLOSE + DECLARE). Three are integer-wraparound bugs: CVE-2026-14662 (undersize tsvector / tsquery allocations), CVE-2026-14677 (undersize allocations in 32-bit pltcl / plperl), and CVE-2026-15742 (fuzzystrmatch writing to effectively-arbitrary addresses). Two are injection paths: CVE-2026-15741 (SQL injection via a deparsed EXTRACT argument) and CVE-2026-18408 (a superuser on the origin server of a pg_dump can execute arbitrary code in the psql client that restores it). The remaining fourteen score 3.8 to 8.2, topped by CVE-2026-14679 (stack buffer overflow in argument matching), CVE-2026-6464 (psql COPY FROM STDIN early failure processes data lines as psql commands), and CVE-2026-14668 (ctid type confusion in the selectivity estimator leaks a derivative of an arbitrary read). No dump/restore required for 18.x users, but three fixes need post-update work: parallel GIN index builds could have left bogus reltuples values in pg_class (check and repair, or autovacuum will skip the table forever), and btree_gist indexes on float / bit columns and ltree indexes with very deep label paths may need a REINDEX.
  • Next up: PostgreSQL 1919 Beta 1 shipped June 4, 2026, Beta 2 followed on July 16, 2026 (bug fixes only — REPACK worker cleanup, SQL/PGQ and FOR PORTION OF corrections, an autovacuum multixact-age scoring fix), and Beta 3 landed August 13, 2026 alongside the 18.6 minor batch. Beta 3's most consequential change is a removal: GROUP BY ALL, added during the 19 cycle, was reverted before GA. It also corrects the new FOR PORTION OF temporal syntax, a REFRESH SEQUENCES race in logical-replication sequence sync, subscription ownership changes, and a postgres_fdw pushdown that returned wrong rows for field = ANY($1) with an implicit coercion. The project's public roadmap still targets GA for September 2026; as of this writing Beta 3 is the newest 19 build and no release candidate has been announced. The beta builds on 18's async I/O (auto-scaling io_method=worker via io_min_workers / io_max_workers), adds SQL/PGQ property-graph queries, a REPACK command whose CONCURRENTLY option reorganizes a table without blocking reads and writes, parallel autovacuum workers, and logical replication of sequence values — and notably flips JIT to disabled by default (the cost-based auto-enable heuristic was judged unreliable) and default_toast_compression to lz4. Not yet GA, so it does not appear in the table above.
  • Confirm latest point release at postgresql.org/docs/release.
Version
PostgreSQL 17
Modern
Maintained
EOL Nov 2029
Sep 26, 2024
Incremental backup; MERGE with RETURNING and WHEN NOT MATCHED BY SOURCE; logical-replication failover; JSON_TABLE.
  • Incremental backuppg_basebackup --incremental writes only blocks changed since the previous backup. Coupled with the new pg_combinebackup tool to stitch incrementals into a full restorable backup. Closes a long-standing gap against MySQL's xtrabackup.
  • MERGE improvements — the SQL-standard MERGE statement (added in 15) gains RETURNING support, WHEN NOT MATCHED BY SOURCE, and views as merge targets.
  • Logical-replication failover — replication slots can now be synchronized to physical standbys, so a logical subscriber survives a primary failover without losing position. The first major step toward production-grade logical-replication HA.
  • JSON_TABLE — the SQL/JSON standard's path-based JSON-to-relational projection finally lands. Joins the SQL/JSON constructors and predicates added across 16 / 17.
  • Vacuum's dead-tuple store reworked — vacuum is no longer silently capped at one gigabyte of memory when maintenance_work_mem or autovacuum_work_mem are set higher, and the default vacuum_buffer_usage_limit rose to 2 MB. Heavily-contended WAL writes got faster in the same release.
  • Removed the venerable adminpack contrib module (its only consumer was the end-of-life pgAdmin III) and the rarely-used db_user_namespace per-database-user simulation; builds that enable JIT now require LLVM 10 or later.
Version
PostgreSQL 16
Modern
Maintained
EOL Nov 2028
Sep 14, 2023
Logical replication from standbys; parallel FULL / RIGHT hash joins; pg_stat_io; SQL/JSON constructors; regex user matching in pg_hba.conf.
  • Logical replication from physical standbys — subscribers can now connect to a hot-standby publisher, not just the primary. Relieves the primary of replication-slot pressure on multi-subscriber topologies.
  • More parallelismFULL and internal RIGHT OUTER hash joins can now be parallelized, as can the string_agg() and array_agg() aggregates. Logical-replication subscribers gained parallel apply of large transactions, and RANGE / LIST partition lookups are cached for cheaper planning.
  • SIMD vector operations — SSE2 on x86-64 and Advanced SIMD (NEON) on ARM. Used for ASCII detection (notably in COPY FROM), JSON string parsing, and some internal C array searches. Hardware CRC-32C acceleration is older and unrelated.
  • SQL/JSON constructors and predicatesJSON_OBJECT(), JSON_ARRAY(), JSON_OBJECTAGG(), JSON_ARRAYAGG(), plus IS JSON / IS NOT JSON checks from the SQL/JSON standard. (JSON(), JSON_SCALAR(), JSON_SERIALIZE() and JSON_TABLE followed in 17.)
  • pg_stat_io view giving cumulative read/write/extend/fsync counters per backend type and IO context.
  • Client-side connection load balancing in libpq — multiple host= entries are tried in random order with load_balance_hosts=random. Also require_auth to constrain which authentication methods a client will accept.
Version
PostgreSQL 15
Modern
Maintained
EOL Nov 2027
Oct 13, 2022
MERGE statement; sort-performance overhaul; row and column filters in logical replication; PUBLIC create permission removed from the public schema.
  • MERGE statement — the SQL-standard upsert. After two decades of the Postgres-specific INSERT ... ON CONFLICT idiom (which remains supported), MERGE finally lands. Improvements continued in 17.
  • Sort performance — in-memory and on-disk sort algorithms reworked; certain query shapes see 2–4x speedups. Notable outlier: ORDER BY + LIMIT combinations on large data sets.
  • Row and column filters in logical replication — per-publication WHERE clauses, explicit column lists in publications, and CREATE PUBLICATION ... FOR TABLES IN SCHEMA. Long-requested feature parity with logical-replication tooling that had been worked around in userspace.
  • Default public schema permissions tightened — non-superusers can no longer create objects in public by default. Fixes a class of multi-tenant security mistakes that had been the canonical Postgres footgun for two decades.
  • Two-phase commit support for logical replication (basis for the failover work in 17).
  • JSON-format log lines (log_destination = jsonlog); Zstandard compression options, including server-side compression during pg_basebackup.
  • Removed the long-deprecated exclusive backup mode; pg_basebackup and continuous archiving are now the only paths.
Version
PostgreSQL 14
Modern
Maintained
EOL Nov 2026
Sep 30, 2021
SEARCH / CYCLE in recursive CTEs; multirange types; LZ4 TOAST compression; logical-replication two-phase commit foundation.
  • Multirange typesint4multirange, int8multirange, nummultirange, tstzmultirange, etc. Generalize the range types added in 9.2 to handle non-contiguous spans (a calendar of available time slots, a set of allowed numeric bands).
  • LZ4 TOAST compressiondefault_toast_compression = lz4 as alternative to the historical pglz codec. ~5x faster compression and decompression, modestly worse ratio. Per-column override available.
  • Recursive CTE SEARCH / CYCLE — SQL-standard syntax for breadth-first / depth-first ordering and cycle detection in WITH RECURSIVE queries.
  • Stored procedures can OUT-bind parameters; RETURN QUERY EXECUTE in PL/pgSQL.
  • Foreign-data-wrapper enhancements — postgres_fdw can INSERT rows in bulk, and a query referencing several foreign tables can scan them in parallel on servers marked async_capable.
  • Logical-replication two-phase-commit foundation laid (full feature in 15).
  • Connection-scaling improvements; per-connection memory overhead reduced; pg_stat_statements normalizes constants more aggressively for better grouping.
  • Last supported year. The project's August 13, 2026 release announcement carries a formal EOL notice for 14: the final minor release lands November 12, 2026, after which 14 receives no further bug or security fixes. 14.24 is the current minor. If you are still on 14 in production, pg_upgrade to 15 or later before that date.
Version
PostgreSQL 13
Modern
EOL
Nov 13, 2025
Sep 24, 2020
B-tree deduplication; incremental sort; partitioned-table logical replication; parallelized VACUUM.
  • B-tree deduplication — B-tree indexes store one copy of each duplicate value with multiple TID pointers, dramatically reducing index size on low-cardinality columns. Some real-world indexes shrank by 50–75%.
  • Incremental sort — the planner can now use a partial sort if the data is already sorted by a prefix of the requested keys (e.g. an index on (a) when sorting by (a, b)). Common ORDER BY + LIMIT shapes get faster.
  • Logical replication of partitioned tablespublish_via_partition_root option to publish from the parent table even though changes happen on partitions. Production-grade partitioned-table logical replication.
  • Parallelized VACUUMVACUUM (PARALLEL N) uses worker processes to vacuum index blocks. Materially shortens vacuum windows on large multi-index tables.
  • Trusted extensions — an extension marked trusted can be installed with CREATE EXTENSION by a non-superuser holding database-level CREATE privileges; SQL-standard FETCH FIRST ... WITH TIES; partitionwise joins now fire between partitioned tables whose partition bounds don't match exactly.
  • New pg_stat_progress_basebackup and pg_stat_progress_analyze views; EXPLAIN, auto_explain, autovacuum, and pg_stat_statements all gain WAL-usage statistics, and EXPLAIN's BUFFERS output starts reporting planning-time buffer usage.
Version
PostgreSQL 12
Modern
EOL
Nov 21, 2024
Oct 3, 2019
Generated columns; JSON path queries (SQL/JSON); pluggable table access methods; recovery.conf removed.
  • Generated columnsGENERATED ALWAYS AS (expression) STORED, computed and stored at write time. Virtual (read-time) variant followed in 18.
  • SQL/JSON path queriesjsonb_path_query(), @? / @@ operators, the SQL/JSON path language. Brings jsonb closer to MongoDB-equivalent expressivity for nested-JSON queries.
  • Pluggable table access methods — the TABLEAM API. Foundation for non-heap storage formats (column stores, log-structured stores) without forking PostgreSQL.
  • Partitioning improvements — thousands of partitions with reasonable planner cost; foreign keys pointing to partitioned tables.
  • recovery.conf removed — long-deprecated; standby setup now uses postgresql.conf + recovery.signal / standby.signal files. The single largest break-glass migration of the modern era.
  • REINDEX CONCURRENTLY; VACUUM skips already-frozen pages.
Version
PostgreSQL 11
Modern
EOL
Nov 9, 2023
Oct 18, 2018
JIT compilation; stored procedures with transaction control; partition-by-hash; covering indexes.
  • JIT compilation — LLVM-based JIT compilation of expression evaluation and tuple deforming for OLAP-heavy queries. Opt-in by default in 11; enabled by default for sufficiently expensive plans starting in subsequent releases. Project led by Andres Freund.
  • Stored procedures with transaction controlCREATE PROCEDURE alongside the existing CREATE FUNCTION; procedures can COMMIT and ROLLBACK mid-execution. Closes a long-standing gap against Oracle / SQL Server.
  • PARTITION BY HASH — declarative hash-partitioning alongside the range and list partitioning added in 10.
  • Covering indexesCREATE INDEX ... INCLUDE (extra_column). Index-only scans now work on more query shapes.
  • Parallel B-tree CREATE INDEX; hash joins parallelized over a shared hash table; CREATE TABLE ... AS, CREATE MATERIALIZED VIEW and UNION become parallelizable; partition scans learn to use parallel workers more efficiently.
  • Default partitions — a partitioned table can nominate one catch-all partition that stores the rows matching none of the others. Not restricted to range partitioning.
Version
PostgreSQL 10
Modern
EOL
Nov 10, 2022
Oct 5, 2017
Logical replication; declarative table partitioning; quorum-commit synchronous replication; integer-major versioning.
  • The versioning-scheme change — previously, "major version" meant the first two segments (9.5, 9.6); minor was the third (9.5.3). From 10 onward, the major is the integer (10, 11, 12) and the minor is the second segment (10.1, 10.2). The shift was contentious during 9.6 / 10 development; the FAQ at postgresql.org/support/versioning documents the change. Two decades of "9.x" tooling assumptions had to be untangled.
  • Logical replication — per-table row-level publish/subscribe replication, complementing the physical (block-level) streaming replication that landed in 9.0. The first time Postgres had a built-in solution to cross-major-version replication, multi-master scenarios, and selective table replication. Years of Slony / Bucardo / pgLogical work landed in core.
  • Declarative table partitioningPARTITION BY RANGE and PARTITION BY LIST as native SQL syntax. Replaced the long-running inheritance-and-trigger pattern that had been the de-facto Postgres partitioning recipe for a decade. Hash partitioning followed in 11.
  • Quorum-commit synchronous replicationsynchronous_standby_names can now specify "any 2 of 5" rather than a strict ordered list.
  • Parallel B-tree index scans, parallel bitmap heap scans, parallel merge joins, and parallel non-correlated subqueries — and parallel query is switched on by default, with max_parallel_workers_per_gather now defaulting to 2. (Parallel sequential scan itself arrived in 9.6, off by default.)
  • SCRAM-SHA-256 authentication; renamed xlog to wal across the entire codebase (CLI tools, directories, function names) to match the 9.x community convention.
  • The annual September / October release cadence was now formalized as policy.
October 2017 — The versioning-scheme change. Postgres 10 was the first release where "major" meant the integer (10, 11, 12) rather than the first two dotted segments (9.5, 9.6). The change resolved two decades of mismatch between the project's release cadence and how tooling parsed versions. Rows below this divider use the older 9.x / 8.x / 7.x scheme.
Version
PostgreSQL 9.6
9.x
EOL
Nov 11, 2021
Sep 29, 2016
Parallel sequential scan / aggregation / join; synchronous replication on multiple standbys; pg_visibility.
  • Parallel query — sequential scans, aggregates, and joins gain parallel-worker support. The single largest planner / executor change since 9.0's streaming replication. OLAP workloads see 2–5x speedups on multi-core machines.
  • Multi-standby synchronous replicationsynchronous_standby_names = '2 (s1, s2, s3)' committing only when at least two of the named standbys have acknowledged. Foundation for the quorum-commit form added in 10.
  • Wait-event reporting in pg_stat_activity (the basis for the diagnostic discipline DBAs would build on for the next decade).
  • Foreign data wrapper improvements: postgres_fdw can push down sorts, joins, and aggregates.
  • Last release before the 10 versioning-scheme change.
Version
PostgreSQL 9.5
9.x
EOL
Feb 11, 2021
Jan 7, 2016
INSERT ... ON CONFLICT (upsert); GROUPING SETS / CUBE / ROLLUP; row-level security; BRIN indexes.
  • INSERT ... ON CONFLICT DO NOTHING / DO UPDATE — the Postgres-specific upsert syntax. Filled the long-standing gap before MERGE finally landed in 15.
  • Row-level securityCREATE POLICY for table-level row filtering applied to SELECT / INSERT / UPDATE / DELETE. Foundation for multi-tenant Postgres deployments.
  • BRIN indexes — Block Range INdexes; an index that stores a single summary range per heap block range. Tiny indexes for very large tables with naturally-ordered data (timestamps, append-only log tables).
  • GROUPING SETS / CUBE / ROLLUP — SQL-standard multi-grouping aggregates. Long-needed for OLAP workloads.
  • jsonb indexing improvements; TABLESAMPLE clause; foreign data wrapper inheritance.
Version
PostgreSQL 9.4
9.x
EOL
Feb 13, 2020
Dec 18, 2014
jsonb; ALTER SYSTEM; replication slots; logical-decoding plugin API; materialized-view refresh-concurrent.
  • jsonb data type — binary-format JSON with full indexing support (GIN). Distinct from the text-based json type added in 9.2: jsonb normalizes whitespace and key order, deduplicates keys, and supports @> containment / ? existence operators. The single most-cited Postgres feature for "why we picked Postgres over Mongo" the rest of the decade.
  • Replication slots — named state on the primary tracking how far a replica has consumed. Foundation for logical decoding (this release) and logical replication (10.0).
  • Logical-decoding plugin API — the WAL → row-level-change extraction mechanism, exposed for extensions. pglogical / BDR / Bucardo built on this.
  • ALTER SYSTEM — SQL-level configuration via ALTER SYSTEM SET name = value; values land in postgresql.auto.conf. Long-overdue replacement for hand-editing postgresql.conf for everything.
  • REFRESH MATERIALIZED VIEW CONCURRENTLY; WITH ORDINALITY for set-returning functions.
Version
PostgreSQL 9.3
9.x
EOL
Nov 8, 2018
Sep 9, 2013
Materialized views; LATERAL joins; updateable views; postgres_fdw; JSON operators.
  • Materialized viewsCREATE MATERIALIZED VIEW. Persistent precomputed query results, refreshed on demand.
  • LATERAL joins — subqueries in FROM can reference columns from earlier FROM entries. SQL-standard from SQL:1999 finally lands in Postgres.
  • postgres_fdw — the foreign data wrapper that makes another Postgres database queryable as if it were local tables. Replaced the older dblink contrib module for most use cases.
  • Auto-updateable simple views (no trigger needed); event triggers; data checksums in initdb.
  • JSON operators (->, ->>, #>) on the text-based json type added in 9.2.
Version
PostgreSQL 9.2
9.x
EOL
Nov 9, 2017
Sep 10, 2012
json data type; index-only scans; range types; cascading replication.
  • json data type — first-class native JSON storage (text-format; the binary jsonb type followed in 9.4).
  • Index-only scans — queries can be satisfied entirely from the index without touching the heap, when the visibility map confirms all-visible pages.
  • Range typesint4range, tstzrange, etc. Foundation for the multirange types added in 14.
  • Cascading replication (a standby can serve another standby).
  • Major lock-contention reductions on multi-CPU systems.
Version
PostgreSQL 9.1
9.x
EOL
Oct 27, 2016
Sep 12, 2011
Synchronous replication; foreign data wrappers (SQL/MED); extensions; UNLOGGED tables; serializable snapshot isolation.
  • Synchronous streaming replicationsynchronous_standby_names; commits block until at least one standby has acknowledged the WAL record.
  • Foreign data wrappers — SQL/MED standard implementation. file_fdw, postgres_fdw (in 9.3), and the long tail of third-party FDWs all built on this API.
  • CREATE EXTENSION — the modern extensions framework. Replaced the older contrib-loading pattern; foundation for PostGIS, pgvector, pg_stat_statements as user-installable extensions.
  • Serializable Snapshot Isolation (SSI) — true serializable transactions without row-level locking. Long-running research effort by Kevin Grittner.
  • UNLOGGED tables; per-column collations; nearest-neighbor index ordering.
Version
PostgreSQL 9.0
9.x
EOL
Oct 8, 2015
Sep 20, 2010
Streaming replication; hot standby; per-column triggers; anonymous code blocks (DO).
  • Streaming replication — physical (block-level) WAL streaming from primary to standby with sub-second lag, replacing the older log-shipping recipe. The single largest HA improvement in Postgres' history.
  • Hot standby — standbys can serve read-only queries while still applying WAL from the primary. Read-replica scale-out without third-party tooling.
  • Per-column update triggers; anonymous PL/pgSQL code blocks (DO statement).
  • In-place major upgrades — the new contrib/pg_upgrade module lands here (Bruce Momjian), supporting in-place upgrades to 9.0 from 8.3 or 8.4 and cutting the dump-and-reload downtime by orders of magnitude. Full 64-bit Windows support arrives in the same release.
  • The 9.x line opens; the project's annual-release cadence solidifies.
Version
PostgreSQL 8.4
8.x
EOL
Jul 24, 2014
Jul 1, 2009
Window functions; common table expressions (WITH); recursive queries.
  • Window functionsOVER (PARTITION BY ... ORDER BY ...); ROW_NUMBER(), RANK(), LAG(), LEAD(). SQL:2003-standard analytics finally land.
  • Common table expressionsWITH clauses for non-recursive query factoring; WITH RECURSIVE for graph and tree traversal.
  • Column-level privileges; per-database locale settings (LC_COLLATE / LC_CTYPE); default and variadic function parameters; parallel pg_restore; the visibility map that cuts vacuum overhead on mostly-static tables; timestamp and timestamptz variants of generate_series().
Version
PostgreSQL 8.3
8.x
EOL
Feb 7, 2013
Feb 4, 2008
HOT updates; full-text search in core (tsvector / tsquery); XML data type; enum types.
  • Heap-Only Tuples (HOT) — updates that don't change indexed columns avoid index bloat by linking new tuple versions inside the same heap page. Long-running write workloads got materially less vacuum pressure.
  • Full-text search in coretsvector / tsquery types and the @@ operator graduated from the tsearch2 contrib module to core, with GIN index support.
  • XML data type and SQL/XML operators; enum types; arrays of composite types.
  • UUID data type; updateable cursors.
Version
PostgreSQL 8.2
8.x
EOL
Dec 5, 2011
Dec 5, 2006
RETURNING clause; warm-standby administration; GIN indexes; CREATE INDEX CONCURRENTLY.
  • RETURNING clauseINSERT / UPDATE / DELETE ... RETURNING ...; finally a way to atomically inspect what was written without a separate SELECT.
  • Warm-standby setup pattern documented as canonical (precursor to streaming replication in 9.0).
  • The GIN (Generalized Inverted iNdex) access method lands (Teodor Sigaev, Oleg Bartunov) — the index behind full-text search, arrays, and the future jsonb. R-tree indexing is dropped in the same release, re-implemented on top of GiST.
  • CREATE INDEX CONCURRENTLY — build an index without blocking concurrent INSERT / UPDATE / DELETE on the table. Also multirow VALUES lists, and an optimizer that can now reorder the outer joins 7.1 introduced.
Version
PostgreSQL 8.1
8.x
EOL
Nov 8, 2010
Nov 8, 2005
Two-phase commit (XA); autovacuum moves into the server; SMP scaling improvements; roles replace users / groups.
  • Two-phase commit (XA) for distributed transactions.
  • Roles unified the previously-separate users and groups; modern privilege model dates from here.
  • Autovacuum integrated into the servercontrib/pg_autovacuum moved into the backend (Álvaro Herrera), so it starts and stops with the database and is configured from postgresql.conf instead of run as a separate daemon.
  • Materially better scaling on multi-CPU SMP machines; bitmap index scans; shared row-level locks via SELECT ... FOR SHARE.
Version
PostgreSQL 8.0
8.x
EOL
Oct 1, 2010
Jan 19, 2005
Native Windows port; Point-in-Time Recovery (PITR); tablespaces; savepoints.
  • Native Windows port — previously Postgres on Windows ran under Cygwin. The native port opened the entire Windows-server developer market and is widely cited as the moment Postgres' adoption broadened beyond the historical Unix base.
  • Point-in-Time Recovery (PITR) — continuous WAL archiving plus restore-to-arbitrary-time recovery. The first time Postgres had a true backup-and-restore story for production HA.
  • Tablespaces — per-table or per-index storage location, allowing multiple-disk deployments.
  • Savepoints (nested transactions); ALTER TABLE can change a column's data type; vacuum cost-delay settings to throttle vacuum's I/O impact on busy systems. (Autovacuum was still the separate contrib/pg_autovacuum here — it moved into the server in 8.1.)
Version
PostgreSQL 7.4
7.x
EOL
Oct 1, 2010
Nov 17, 2003
Information schema; performance overhaul; the version-3 client/server protocol.
  • Information schema (SQL-spec metadata views).
  • Major query optimizer improvements; subquery flattening; IN rewritten internally.
  • The version-3 client/server wire protocol — error codes, richer status information, prepared statements available at the protocol level, and parameter values sent separately from the SQL text. The older protocol stayed supported on both ends. Also full IPv6 support, cursors that can outlive their transaction, and Henry Spencer's replacement regular-expression engine.
Version
PostgreSQL 7.3
7.x
EOL
Nov 27, 2007
Nov 27, 2002
Schemas (namespaces); prepared statements; better dump format.
  • Schemas as a level above tables (the SQL-standard schema_name.table_name dotted reference).
  • Server-side prepared statements (PREPARE / EXECUTE), and the NULL-safe IS DISTINCT FROM comparison operator (Thomas Lockhart) — often misfiled against 7.4, but it is a 7.3 addition.
  • pg_dump output reworked — smart quoting and portability improvements, SERIAL columns dumped back out as SERIAL, clearer foreign-key constraints in the dump file, and large-file (>2 GB) support; pg_dumpall overhauled in the same release.
Version
PostgreSQL 7.2
7.x
EOL
Feb 4, 2007
Feb 4, 2002
VACUUM without exclusive lock; statistics view system; the four-billion-transaction ceiling lifted.
  • Non-blocking VACUUM — previously vacuum required an exclusive table lock; this release made it lock-free against readers and writers. A foundational change for production-grade Postgres operations.
  • Statistics view system (pg_stat_* views); improved planner statistics.
  • The four-billion-transaction ceiling is gone — installations that ran past that count no longer break. In the same release OIDs become optional per table, ANALYZE starts computing histogram column statistics for the optimizer, and MD5 password storage plus Unix-domain-socket authentication arrive.
Version
PostgreSQL 7.1
7.x
EOL
Apr 13, 2006
Apr 13, 2001
Write-Ahead Logging (WAL); TOAST (large-row storage); SQL92 outer joins.
  • Write-Ahead Logging (WAL) — the architectural change that gave Postgres durable, crash-recoverable storage. Foundation for every subsequent HA / replication / PITR feature; the most-cited "things finally got serious" milestone in Postgres' history.
  • TOAST — The Oversized Attribute Storage Technique; large field values get pushed out to a side relation. Removed the practical row-size limit.
  • Outer joins — listed among the release's headline changes, in SQL92 syntax, retiring the UNION / NOT IN workaround that had stood in for them. 7.0 had shipped SQL92 join syntax for inner joins only, so this is where LEFT JOIN and friends actually arrive.
  • Postgres' production credibility era effectively starts here.
Version
PostgreSQL 7.0
7.x
EOL
May 8, 2005
May 8, 2000
Foreign keys; SQL92 JOIN syntax (inner joins only); planner overhaul.
  • Foreign keys in core (referential integrity finally a first-class feature).
  • SQL92 join syntaxJOIN, NATURAL JOIN, JOIN ... USING, JOIN ... ON and column correlation names. The release's own notes limit it to INNER JOIN for this version; outer joins followed in 7.1.
  • Planner overhaul; first version where complex query planning matched contemporary commercial databases.
Version
PostgreSQL 6.5
6.x
EOL
Jun 9, 2004
Jun 9, 1999
Multi-Version Concurrency Control (MVCC); temporary tables; CASE / INTERSECT / EXCEPT; a true numeric type.
  • MVCC — Multi-Version Concurrency Control, replacing the older table-locking concurrency model. Readers no longer block writers; writers no longer block readers. The single most architecturally consequential commit in PGDG-era Postgres; the design lineage extends back to Stonebraker's original 1986 POSTGRES paper, but this release made it production-ready.
  • Temporary tables — guaranteed a unique name within a session and destroyed when the session exits. Alongside them the release's own summary groups a batch of SQL additions: CASE, INTERSECT, EXCEPT, LIMIT / OFFSET, SET TRANSACTION ISOLATION LEVEL, SELECT ... FOR UPDATE row-level locking, and an improved LOCK TABLE.
  • A true numeric data type with user-specified precision; and hot backupspg_dump takes advantage of the new MVCC snapshots to produce a consistent dump while the database stays online and answering queries.
Version
PostgreSQL 6.4
6.x
EOL
Oct 30, 2003
Oct 30, 1998
Views and the rewritten rule system; PL/pgSQL as the second procedural language; the serial type; multi-byte character sets.
  • Views and rules become functional — on the strength of Jan Wieck's rewrite of the rule system: rules on relations work, insert / update / delete rules on views work, and the pg_tables / pg_indexes / pg_rules system views arrive alongside them.
  • PL/pgSQL — Jan Wieck's second procedural language, contributed to go with the PL/pgTCL he had shipped in 6.3. The Oracle-PL/SQL-inspired dialect became the canonical way to write Postgres functions.
  • The serial type arrives — parsed as "an amalgam of the int4 type, a sequence, and a unique index" — along with an 8-byte integer type on platforms that support one, and optional multi-byte character-set support from Tatsuo Ishii.
Version
PostgreSQL 6.3
6.x
EOL
Mar 1, 2003
Mar 1, 1998
Subselects; SQL92 constraint / PRIMARY KEY / UNIQUE syntax; the procedural-language interface and PL/pgTCL, Postgres' first PL.
  • Subqueries (SELECT nested in SELECT / WHERE) — "full SQL92 subselect capability (everything is here but target-list subselects)" in the release's own words, and the change its notes single out as the headline.
  • The procedural-language interface — the CREATE PROCEDURAL LANGUAGE statement and the PL backend interface (Jan Wieck), plus PL/pgTCL, the first procedural language built on it. PL/pgSQL followed as the second PL in 6.4.
  • More SQL92 syntax: constraint syntax made SQL92-compliant, PRIMARY KEY and UNIQUE clauses implemented using indexes, and the CURRENT_DATE / CURRENT_TIME / CURRENT_TIMESTAMP / CURRENT_USER constants. Real deadlock detection replaces the old timeout.
Version
PostgreSQL 6.2
6.x
EOL
long EOL
Oct 2, 1997
First JDBC driver; triggers via CREATE TRIGGER; the Server Programming Interface (SPI); SQL92 NOT NULL and DEFAULT.
  • First JDBC driver, contributed as a client interface; the pg_password utility.
  • Triggers land, via CREATE TRIGGER (SQL3), together with the Server Programming Interface (SPI) that lets C functions execute queries. Note the two things often misfiled here: CREATE CONSTRAINT TRIGGER arrived later, in 7.0, and the serial column type in 6.4.
  • SQL92 conformance work: NOT NULL, table-level DEFAULT and CONSTRAINT clauses, the EXTRACT() / POSITION() / SUBSTRING() / TRIM() functions, and /* ... */ block comments.
Version
PostgreSQL 6.1
6.x
EOL
long EOL
Jun 8, 1997
Geometric data types; better date/time handling.
  • Geometric data types (point, line, polygon) inherited from POSTGRES research.
  • Date/time-handling overhaul.
Version
PostgreSQL 6.0
6.x
EOL
long EOL
Jan 29, 1997
First release under the PostgreSQL name; first PGDG release.
  • First release under the PostgreSQL name — the contributors settled on the new name over the course of 1996, reflecting the project's full SQL conformance and shedding the temporary "95" suffix; the rename landed in the source tree on December 11, 1996. The version numbers were reset to 6.0 to resume the sequence Berkeley's POSTGRES had begun, which is why there is no PostgreSQL 1 through 5.
  • First release shepherded by the new PostgreSQL Global Development Group (PGDG) — an informal worldwide volunteer development team; Marc Fournier coordinated the infrastructure handoff from Berkeley.
  • Major performance, reliability, and SQL-conformance improvements across the board; the prior Postgres95 codebase had largely been a research-quality fork.
Version
Postgres95
P95
EOL
long EOL
May 1995
Andrew Yu and Jolly Chen fork POSTGRES at Berkeley; POSTQUEL is replaced by SQL.
  • Postgres95 0.01 — the initial release, dated May 1, 1995 — shipped from Andrew Yu and Jolly Chen, two students in Stonebraker's group at Berkeley who had rewritten the parser to accept SQL in place of the POSTGRES POSTQUEL query language. Postgres95 1.0 followed on September 5, 1995, loosening the project's copyright to freely-modifiable terms with Stonebraker's assent. This was the moment Postgres became something a working developer could plausibly use as their primary database.
  • Renamed to "Postgres95" partly to mark the radical break from POSTQUEL, partly to track the year (echoing the fashionable "95" suffix on Windows 95, OPENSTEP, etc.).
  • Key changes, per the project's own history: POSTQUEL is replaced by SQL, implemented in the server; a new psql program built on GNU Readline arrives for interactive queries and "largely superseded the old monitor program"; the build moves from BSD make to GNU make; the code is made fully ANSI C and trimmed by a quarter, running 30–50% faster than POSTGRES 4.2 on the Wisconsin Benchmark. The instance-level rule system is dropped (rewrite rules stay), and libpgtcl lands for Tcl clients.
  • Followed by Postgres95 1.01 through Postgres95 1.09 over the rest of 1995 and 1996. The project moved off Berkeley servers to volunteer-run hosts during this period; the founding of the PGDG and the rename to PostgreSQL came the following summer.
Version
POSTGRES (Berkeley)
POSTGRES
EOL
long EOL
1986 – 1994
Michael Stonebraker's Berkeley research database. POSTQUEL query language; many of Postgres' modern architectural choices originated here.
  • POSTGRES — Stonebraker's "post-Ingres" research database, started at UC Berkeley in 1986 as the successor to Ingres (Stonebraker's 1973 relational database project). Funded by DARPA, ARO, and the NSF.
  • Used the POSTQUEL query language — not SQL. POSTQUEL was Berkeley's QUEL successor with object-relational extensions: user-defined types, inheritance, and rules; many of these ideas survived into modern Postgres but the language itself was replaced.
  • The 1986 SIGMOD paper "The Design of POSTGRES" is the project's foundational document.
  • Released in numbered versions internally: POSTGRES 1 (1989), POSTGRES 2 (1990), POSTGRES 3 (1991), through POSTGRES 4.2 (June 1994). Distributed under a permissive Berkeley license, source available, but research-grade quality.
  • Spawned the commercial Illustra Information Technologies (1992; co-founded by Stonebraker), which was acquired by Informix in 1996. Informix was acquired by IBM in 2001. The POSTGRES research lineage has parallel commercial branches (Informix Universal Server, IBM Informix) distinct from the open-source PostgreSQL line.
  • Stonebraker shut down the Berkeley research project in 1994 to focus on Illustra; Andrew Yu and Jolly Chen forked the codebase into Postgres95 the same year, beginning the open-source line that became PostgreSQL.

Click any row to expand. Each row has a stable id for sharing — e.g. /software/postgres/versions/#postgres-18, #postgres-9-4, #postgres95. Live release / EOL state is documented at postgresql.org/support/versioning.

The 1986 Berkeley origin and the POSTGRES research years

PostgreSQL's lineage begins in 1986, when Michael Stonebraker — already known for the Ingres relational database he had built at Berkeley starting in 1973 — started a successor project he called POSTGRES (literally "post-Ingres"). The project's design goals went beyond relational: object-relational features (user-defined types, inheritance, rules), better extensibility, and a research vehicle for ideas Stonebraker thought databases should adopt next. The 1986 SIGMOD paper "The Design of POSTGRES" is the foundational document; it covers the concepts that survive in Postgres to this day: rich type system, multi-version concurrency control, the rule system, and SQL's eventual displacement of the project's original POSTQUEL query language.

POSTGRES was funded by DARPA, ARO, and the NSF, and was distributed under a permissive Berkeley license. Internal numbered versions ran from POSTGRES 1 in 1989 through POSTGRES 4.2 in June 1994. The codebase served as a research platform — it was used in production at Berkeley and at a small set of external sites, but it was research-quality code with the rough edges that implies. In 1992, Stonebraker also co-founded Illustra Information Technologies, the commercial company that would eventually take the POSTGRES technology to market; Illustra was acquired by Informix in 1996, and Informix in turn was acquired by IBM in 2001. The Informix Universal Server / IBM Informix product line carries a parallel commercial descent from the Berkeley POSTGRES research; the open-source PostgreSQL line we use today is a separate lineage.

Postgres95 — the 1994 SQL fork

In 1994 Stonebraker shut down the POSTGRES research project at Berkeley to focus on Illustra. Two students in his group — Andrew Yu and Jolly Chen — took over the codebase. Their key contribution was rewriting the parser to accept SQL in place of the project's homegrown POSTQUEL query language, a decision that would define everything that followed: SQL was already the lingua franca of databases, and a research curiosity that spoke only POSTQUEL had no path to mainstream adoption. They renamed the project Postgres95, partly to mark the SQL break, partly to follow the "95" naming convention then in fashion. The first public drop, Postgres95 0.01, is dated May 1, 1995; version 1.0 followed that September, with several practical follow-ups (1.01 through 1.09) over the next year. The project also moved off Berkeley servers during this period to volunteer-run infrastructure, the proximate move that made the next step possible.

The 1996 rename to PostgreSQL and the Global Development Group

In July 1996 the Postgres95 sources were imported into a shared repository run off Berkeley hardware — the point at which the open-source project proper begins — and over the rest of that year the contributors collectively renamed it from Postgres95 to PostgreSQL, reflecting the project's growing SQL conformance and shedding the temporary "95" year suffix. The rename landed in the tree on December 11, 1996, and the version numbers were reset to 6.0 to resume the sequence Berkeley's POSTGRES had begun. The project's own history records the choice collectively — "we chose a new name" — and credits no individual proposer. Around the same time, the project formed an informal worldwide volunteer team that called itself the PostgreSQL Global Development Group (PGDG), with Marc Fournier coordinating infrastructure (mailing lists, ftp site, source repository). The first release under the PostgreSQL name was 6.0, in January 1997.

The PGDG has been the project's governance ever since. It has no corporate parent and no formal voting structure on most decisions; it operates on a long-running culture of mailing-list-based discussion and a small core team that ratifies contentious calls. The one piece of formal legal machinery is deliberately narrow: the PostgreSQL Community Association (PGCA), a non-profit the core team chartered in 2011 to hold and defend the project's trademarks and brand assets, funded by corporate and individual sponsorship and chaired by core-team member Dave Page. It does not set technical direction, own the source, or employ the developers — the mailing lists still do all of that. The model is widely cited as one of the most stable open-source-database governance arrangements in the industry — PostgreSQL has weathered several waves of well-funded commercial would-be successors (EnterpriseDB, Greenplum, the cloud-managed-Postgres era) without fragmenting, and remains the canonical upstream for all of them.

The architectural arc — MVCC, WAL, and the modern foundation

Postgres' modern architecture didn't arrive in one release; it accumulated. The two most consequential pieces both landed in the late 1990s and early 2000s.

Multi-Version Concurrency Control (MVCC) shipped in 6.5 (June 1999), although the design lineage goes back to Stonebraker's original POSTGRES paper. Under MVCC, readers see a snapshot of the database as of when their transaction started, and writers create new row versions rather than blocking readers. The result — readers don't block writers, writers don't block readers — is the property every modern database is judged against. Postgres' MVCC implementation has been evolved continuously since (HOT updates in 8.3, freeze-map optimization in 9.6, the visibility-map machinery that makes index-only scans possible), but the architectural commitment was 6.5.

Write-Ahead Logging (WAL) shipped in 7.1 (April 2001). WAL is the durable log of every change Postgres makes to data files; the database can crash and recover by replaying the log from the last consistent checkpoint forward. Every subsequent piece of high-availability infrastructure — PITR (8.0), streaming replication (9.0), logical decoding (9.4), logical replication (10.0), incremental backup (17.0) — is built on WAL. 7.1 is widely cited as the moment Postgres became a serious production database; the prior 7.0 / 6.x line had usable concurrency via MVCC but no real durability story.

The major-feature arc

Beyond MVCC and WAL, the headline features that define modern Postgres landed across two decades:

  • Foreign keys in 7.0 (May 2000) — first-class referential integrity.
  • Native Windows port + PITR + tablespaces in 8.0 (January 2005) — the broadest adoption-expanding release of the 8.x line.
  • Window functions and CTEs in 8.4 (July 2009) — SQL:2003 analytics finally land; WITH RECURSIVE for graph and tree traversal.
  • Streaming replication and hot standby in 9.0 (September 2010) — the most-cited HA milestone.
  • Foreign data wrappers and extensions framework in 9.1 (September 2011) — the SQL/MED API and CREATE EXTENSION; foundation for PostGIS, pgvector, pg_stat_statements as installable extensions.
  • JSONB in 9.4 (December 2014) — binary-format JSON with full GIN indexing; the single most-cited Postgres feature for "why we picked Postgres over Mongo" in the 2015–2020 era.
  • Parallel query in 9.6 (September 2016) and 10 (October 2017) — multi-core scaling for sequential scans, aggregations, and joins.
  • Logical replication and declarative partitioning in 10 (October 2017) — per-table publish/subscribe; PARTITION BY RANGE / LIST / HASH.
  • JIT compilation in 11 (October 2018) — LLVM-based JIT for expression evaluation; led by Andres Freund. Enabled by default for expensive plans through the 12–18 line; the 19 beta (June 2026) reverses course and ships JIT disabled by default, reflecting years of mixed real-world results on the cost-threshold heuristic.
  • MERGE statement in 15 (October 2022) — SQL-standard upsert; complemented the long-running INSERT ... ON CONFLICT idiom (still supported).
  • Incremental backup in 17 (September 2024) — pg_basebackup --incremental + pg_combinebackup.
  • Asynchronous I/O in 18 (September 2025) — concurrent reads issued through the new io_method setting, which defaults to a pool of I/O worker processes and can use Linux io_uring on builds compiled with liburing; the largest backend-architecture change since parallel query. The 19 beta (June 2026) extends it with auto-scaling io_method=worker pools (io_min_workers / io_max_workers) and AIO statistics in EXPLAIN ANALYZE.

The October 2017 versioning-scheme change

For two decades, Postgres had used dotted-version "majors": 6.5 was a major, 6.5.3 was a minor; 9.6 was a major, 9.6.5 was a minor. Most operational tooling (linker shared-library naming, package managers, monitoring) coded around the assumption that the first two segments were the major version. By the mid-2010s the version numbers were running into ergonomic problems: 9.6 sounded like a minor bump after 9.5 even though it was a full major, and the project was visibly going to need to follow 9.x with something that didn't sound smaller. Discussion ran through 9.6's development cycle and concluded with a switch: from PostgreSQL 10 (October 2017) onward, the major version is an integer (10, 11, 12) and the minor is the second segment (10.1, 10.2). The FAQ at postgresql.org/support/versioning documents the change. Lots of tooling needed to be updated; in 2026 the long tail of fixes is mostly behind us, but bash one-liners that cut -d. -f1,2 on a Postgres version string still occasionally bite users.

Commercial forks and the cloud-managed Postgres era

Postgres' permissive license has produced a long tail of commercial forks and managed services. The earliest was the Berkeley spin-out Illustra (1992 → Informix 1996 → IBM 2001) on the POSTGRES research lineage. The open-source PostgreSQL line spawned its own commercial branches over the next two decades:

  • EnterpriseDB (March 2004) — commercial Postgres distribution with Oracle compatibility tooling, co-founded by Andy Astor and Denis Lussier. Absorbed the UK consultancy 2ndQuadrant — Simon Riggs' replication shop, home of BDR and pglogical — in September 2020; remains the largest dedicated Postgres company, and employs several Core Team members and major contributors (Bruce Momjian, Peter Eisentraut, Robert Haas, Andrew Dunstan, Álvaro Herrera).
  • Greenplum (2003) — massively-parallel-processing fork of Postgres for analytics warehouses. EMC bought it in 2010 and folded it into Pivotal, the EMC/VMware spin-out stood up across 2012–13; it passed to VMware with the December 2019 Pivotal acquisition, then to Broadcom with VMware in November 2023. Pivotal had open-sourced the engine in 2015, but Broadcom closed it again in May 2024 — the public gpdb repository was archived read-only on May 24, 2024 and releases now ship only inside Tanzu Data Suite. The community fork Apache Cloudberry — still an Apache incubator project, not yet a top-level one — carries the open-source line forward. Either way the fork runs several Postgres majors behind upstream by design.
  • Citus (2011) — sharding technology that made Postgres horizontally scalable. Citus Data shipped a fork first; it "unforked" into a pure Postgres extension and open-sourced the result in March 2016, which is the model the rest of the ecosystem copied. Acquired by Microsoft in 2019. It shipped as Azure Cosmos DB for PostgreSQL, which Microsoft has since put on a retirement path and no longer recommends for new projects; the extension now lands in Azure Database for PostgreSQL as the Elastic Clusters feature.
  • Postgres-XL / Postgres-XC — multi-master MPP forks that ran in parallel to Citus's extension-based approach; less commercially successful.
  • AWS Aurora-Postgres (2017) — AWS's managed PostgreSQL with proprietary storage layer that decouples compute from storage. The cloud-managed-Postgres era's most commercially successful product.
  • Google AlloyDB (2022) — Google Cloud's Aurora competitor with similar storage decoupling.
  • Neon, Supabase, Crunchy Bridge, Xata — the 2020s-era Postgres-as-a-service companies, each with different storage/serverless/branching twists, all running unmodified or lightly-extended PostgreSQL upstream. Two were absorbed by analytics platforms in 2025: Databricks agreed to acquire Neon in May 2025 (reported at roughly $1B), and Snowflake announced its acquisition of Crunchy Data at its June 2025 user conference — in both cases buying a managed-Postgres operator to sit alongside a warehouse rather than forking the engine. Tembo left the category outright: it dropped its hosted-Postgres product in 2025 and repositioned as a cloud coding-agent platform.

Notably, none of the major Postgres forks have produced a long-running upstream-divergent codebase the way MariaDB and MySQL went their separate ways after the 2009 Oracle acquisition. The PostgreSQL upstream has remained the canonical home for the project's evolution, and the commercial ecosystem has organized itself around extensions, managed-service operators, and storage-layer plugins rather than language or query-engine forks.

People who actually shaped Postgres

Berkeley / origin era: Michael Stonebraker (creator of POSTGRES at Berkeley; 2014 Turing Award; co-founder of Ingres, Illustra, Vertica, VoltDB, Tamr, SciDB, and the broader database-startup-of-startups arc), Andrew Yu and Jolly Chen (authored the Postgres95 fork that replaced POSTQUEL with SQL), Tatsuo Ishii (multi-byte character support; CREATE CONVERSION; pgbench; the Japanese documentation translation; Pgpool-II author), Marc Fournier (PGDG infrastructure coordinator from the 1996 founding through the 2010s — mailing lists, ftp site, source repository, websites).

Modern Core Team and prolific committers: Tom Lane (the most-prolific committer in PostgreSQL's history; planner and parser maintenance for over two decades; Snowflake), Bruce Momjian (a co-founder of the PostgreSQL Global Development Group — not of EnterpriseDB, which he joined later; maintains the TODO list, applies patches, and is the project's most-travelled speaker; EDB), Peter Eisentraut (build system, porting, documentation, and the internationalization effort; served on the PostgreSQL 10 release-management team; EDB), Magnus Hagander (the Win32 port and the authentication system; postgresql.org web and project infrastructure; Redpill Linpro), Robert Haas (principal author of parallel query; also unlogged tables, index-only scans, and 17's incremental backup; EDB), Andres Freund (logical decoding; JIT compilation; async I/O in 18; replication; Microsoft), Heikki Linnakangas (replication and recovery; two-phase commit; Neon).

Deep specialists: Kevin Grittner (serializable snapshot isolation), Álvaro Herrera (autovacuum; partitioning DDL; BRIN indexes), Tomas Vondra (CREATE STATISTICS and multi-column statistics; ANALYZE distinct-value estimates), Stephen Frost (security; row-level security), Joe Conway (PL/R; dblink; Amazon RDS Open Source Databases), Greg Stark (planner internals), Andrew Dunstan (build infrastructure; PL/Perl), Dave Page (pgAdmin; PGDG infrastructure), Simon Riggs (synchronous replication; 2ndQuadrant; EnterpriseDB; passed away in 2024).

Extensions ecosystem: Paul Ramsey and Regina Obe (PostGIS), Andrew Gierth (grouping sets; ordered-set aggregates; hstore enhancements), Jonathan Katz (community advocacy; Core Team; pgvector contributor; Databricks), Andrew Kane (author and maintainer of pgvector, the extension that turned Postgres into a mainstream vector store for embeddings across the 2023–2025 wave).

Find your version — in psql or the terminal

The browser cannot detect what version of PostgreSQL is running on your server — there's no header or fingerprint that exposes it. Run one of these in psql or your shell to see your real install.

What's running?

Print the client version, the server version, and the numeric form for tooling.

$ psql --version                       # client version (libpq)
$ pg_config --version                  # build-time version

$ psql -c "SELECT version();"           # full server version string
$ psql -c "SHOW server_version;"         # just the version
$ psql -c "SHOW server_version_num;"     # numeric form (180001 = 18.1)

# Inside psql:
postgres=# \\conninfo                      # shows server, port, version

Pin a project to a specific Postgres

Modern projects pin via the container image tag or the Helm chart values; minor versions within a major are binary-compatible.

# docker-compose.yml
services:
  db:
    image: "postgres:18-alpine"          # floats minor; rebuild for security fixes
    image: "postgres:18.6-alpine"        # pinned exact

# Helm values (bitnami/postgresql, cnpg, etc.)
image:
  tag: "18.6.0"

Minor-version upgrades (18.0 → 18.1) are binary-compatible: stop, swap binaries, restart. Major upgrades (17 → 18) require pg_upgrade or dump/restore.

Install or upgrade a version

Multiple Postgres majors can coexist on the same machine; postgresql@N packages are keg-only on Homebrew for exactly this reason.

# macOS (Homebrew, keg-only formulae for side-by-side majors)
$ brew install postgresql@18
$ brew install postgresql@17              # 17 stays around for pg_upgrade
$ brew services start postgresql@18

# Debian / Ubuntu (PGDG apt repository)
$ sudo apt install postgresql-18 postgresql-17

# Fedora / RHEL (PGDG dnf repository)
$ sudo dnf install postgresql18-server postgresql18-contrib

# Windows (winget)
> winget install PostgreSQL.PostgreSQL.18

# Official installers and full PGDG repo docs:
# https://www.postgresql.org/download/

Upgrade your data to a new major

pg_upgrade moves data from one major to the next without a full dump/restore; link mode swaps file inodes for a near-instant cutover on the same disk.

# Stop both servers first; have the new major already initdb'd.
$ pg_upgrade \\
    --old-bindir=/usr/lib/postgresql/17/bin \\
    --new-bindir=/usr/lib/postgresql/18/bin \\
    --old-datadir=/var/lib/postgresql/17/main \\
    --new-datadir=/var/lib/postgresql/18/main \\
    --link                                  # hard-link instead of copy; near-instant

# Cloud-managed Postgres handles upgrades for you:
#   AWS RDS / Aurora-Postgres   - "Modify" → engine version
#   Google Cloud SQL / AlloyDB   - "Edit" → database version
#   Azure Database for PostgreSQL - portal blade or az CLI
#   Each runs pg_upgrade under the hood with a maintenance window.

Full step-by-step at postgresql.org/docs/current/pgupgrade.html.

Sources: postgresql.org/support/versioning; postgresql.org/docs/release; postgresql.org/about/newsarchive; feature matrix; wiki.postgresql.org; Stonebraker's 1986 SIGMOD paper "The Design of POSTGRES"; postgresql.org/community/contributors; and the books and contemporaneous reporting cited inline. Last updated September 2026.

Mungomash LLC · More software pages