pg.ddx.io SQL standards

SQL standards & PostgreSQL conformance

Every ISO/IEC 9075 (SQL) feature, cross-referenced with which PostgreSQL release supports it — from 9.1 to 18 — with the syntax/implementation notes PostgreSQL records, what each release added, and what is still unimplemented.

About the data. The ISO/IEC 9075 standard text itself is copyrighted and is not redistributed here. What this page archives and cross-references is PostgreSQL's own machine-readable conformance assessment (src/backend/catalog/sql_features.txt, exposed live as information_schema.sql_features), read at each release tag of the postgres git history. Feature IDs (F031, T611, T821 …) and names are the standard's; the supported? judgement and the comments are PostgreSQL's. Rebuilt from the git history, so it tracks new releases automatically.

Support by PostgreSQL version

How many of the standard's catalogued features each release implements, and how many it added over its predecessor:

PostgreSQLSQL features supportedAdded vs previous
9.1184—
9.2187+4
9.3189+2
9.4191+2
9.5197+6
9.6197—
10210+13
11212+2
12225+14
13234+9
14239+6
15244+5
16297+53
17319+22
18320+1

What each recent release added

The SQL-standard features that became supported in each version (the “different” side — new syntax and implementation):

12 → 13 +9
E182 Module language, F181 Multiple module support, F311 Schema definition statement, F385 Drop column generation expression clause, F394 Optional normal form specification, F867 FETCH FIRST clause: WITH TIES option, T612 Advanced OLAP operations, T653 SQL-schema statements in external routines … and 1 more
13 → 14 +6
F341 Usage tables, F404 Range variable for common column names, S404 TRIM_ARRAY, T133 Enhanced cycle mark values, T332 Extended roles, T434 GROUP BY DISTINCT
14 → 15 +5
B128 Routine language SQL, F292 UNIQUE null treatment, F312 MERGE statement, F313 Enhanced MERGE statement, F314 MERGE statement with DELETE branch
15 → 16 +53
F035 REVOKE with CASCADE, F036 REVOKE statement performed by non-owner, F037 REVOKE statement: GRANT OPTION FOR clause, F038 REVOKE of a WITH GRANT OPTION privilege, F112 Isolation level READ UNCOMMITTED, F113 Isolation level READ COMMITTED, F114 Isolation level REPEATABLE READ, F303 INTERSECT DISTINCT table operator … and 45 more
16 → 17 +22
T821 Basic SQL/JSON query operators, T823 SQL/JSON: PASSING clause, T825 SQL/JSON: ON EMPTY and ON ERROR clauses, T826 General value expression in ON ERROR or ON EMPTY clauses, T827 JSON_TABLE: sibling NESTED COLUMNS clauses, T828 JSON_QUERY, T829 JSON_QUERY: array wrapper options, T865 SQL/JSON item method: bigint() … and 14 more
17 → 18 +1
F492 Optional table constraint enforcement

The two big recent jumps: 16 filled 53 gaps (isolation-level and REVOKE conformance, set-operator spellings, and more), and 17 landed the SQL/JSON query operators (JSON_TABLE, JSON_QUERY, JSON_EXISTS, JSON_VALUE) from SQL:2016.

Coverage by feature area

Where PostgreSQL 18 is complete and where the standard has features it does not implement (the “same vs different” at a glance). Core SQL (the mandatory features every conforming implementation must have) is fully supported; Datalink and SQL-standard row types are intentionally unimplemented; SQL/XML and the structured user-defined types are partial.

Feature areaSupported in 18Total in standard
Additional features115185
Core SQL (optional features)121155
XML (SQL/XML)48137
User-defined types / structured1449
Binding / embedded SQL344
Datalink / foreign data025
Core SQL (mandatory)1919
Row types03

Full feature matrix

Search by feature id, name, or area; filter to a version. “Y” = supported, “·” = not supported, in that release. Needs JavaScript; the summaries above do not.

Use this data