{
  "$schema": "https://docs.sqlparser.com/capabilities/v1/schema/dialect.schema.json",
  "dialect": "postgresql",
  "display_name": "PostgreSQL",
  "aliases": ["postgres", "pgsql"],
  "product": "General SQL Parser",
  "edition": "java",
  "version": "4.1.11",
  "measured_at": "2026-08-10T14:47:38.366768857Z",
  "provenance": {
    "kind": "measured",
    "artifact_sha256": "71895b6e5ab0",
    "corpus_commit": "dcd6212a9",
    "corpus_files": 132,
    "methodology_url": "https://docs.sqlparser.com/reference/sql-syntax/#methodology"
  },
  "parse_coverage": {
    "kind": "measured",
    "note": "Pass rates are over GSP's documented-example corpus for this dialect, not a percentage of the entire SQL dialect.",
    "constructs": {"passed": 127, "total": 132},
    "statements": {"passed": 467, "total": 481},
    "statement_classes": {
      "select": {"constructs": {"passed": 15, "total": 16}, "statements": {"passed": 45, "total": 46}},
      "dml": {"constructs": {"passed": 11, "total": 11}, "statements": {"passed": 45, "total": 45}},
      "stored_procedures": {"constructs": {"passed": 5, "total": 6}, "statements": {"passed": 14, "total": 16}}
    }
  },
  "keywords": {
    "kind": "measured",
    "measured_at": "2026-08-08T14:54:19Z",
    "total": 613,
    "allowed_as_identifier": 582,
    "context_specific": 30,
    "blocked": 1,
    "details_url": "https://docs.sqlparser.com/reference/sql-syntax/postgresql/keyword-compatibility/"
  },
  "docs_url": "https://docs.sqlparser.com/reference/sql-syntax/postgresql/",
  "constructs": [
    {"name": "ABORT", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-abort.html"},
    {"name": "ALTER AGGREGATE", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-alteraggregate.html"},
    {"name": "ALTER COLLATION", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-altercollation.html"},
    {"name": "ALTER CONVERSION", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-alterconversion.html"},
    {"name": "ALTER DATABASE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-alterdatabase.html"},
    {"name": "ALTER DEFAULT PRIVILEGES", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-alterdefaultprivileges.html"},
    {"name": "ALTER DOMAIN", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-alterdomain.html"},
    {"name": "ALTER EXTENSION", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-alterextension.html"},
    {"name": "ALTER FOREIGN DATA WRAPPER", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-alterforeigndatawrapper.html"},
    {"name": "ALTER FOREIGN TABLE", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-alterforeigntable.html"},
    {"name": "ALTER FUNCTION", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-alterfunction.html"},
    {"name": "ALTER GROUP", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-altergroup.html"},
    {"name": "ALTER INDEX", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-alterindex.html"},
    {"name": "ALTER MATERIALIZED VIEW", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-altermaterializedview.html"},
    {"name": "ALTER OPERATOR", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-alteroperator.html"},
    {"name": "ALTER OPERATOR FAMILY", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-alteropfamily.html"},
    {"name": "ALTER ROLE", "category": "", "passed": 7, "total": 7, "source": "https://www.postgresql.org/docs/9.4/sql-alterrole.html"},
    {"name": "ALTER RULE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-alterrule.html"},
    {"name": "ALTER SEQUENCE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-altersequence.html"},
    {"name": "ALTER SERVER", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-alterserver.html"},
    {"name": "ALTER SYSTEM", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-altersystem.html"},
    {"name": "ALTER TABLE", "category": "", "passed": 23, "total": 23, "source": "https://www.postgresql.org/docs/9.4/sql-altertable.html"},
    {"name": "ALTER TABLESPACE", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-altertablespace.html"},
    {"name": "ALTER TEXT SEARCH CONFIGURATION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-altertsconfig.html"},
    {"name": "ALTER TEXT SEARCH DICTIONARY", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-altertsdictionary.html"},
    {"name": "ALTER TRIGGER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-altertrigger.html"},
    {"name": "ALTER TYPE", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-altertype.html"},
    {"name": "ALTER USER MAPPING", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-alterusermapping.html"},
    {"name": "ALTER VIEW", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-alterview.html"},
    {"name": "BEGIN", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-begin.html"},
    {"name": "CLOSE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-close.html"},
    {"name": "CLUSTER", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-cluster.html"},
    {"name": "COMMENT", "category": "", "passed": 28, "total": 36, "source": "https://www.postgresql.org/docs/9.4/sql-comment.html"},
    {"name": "COMMIT", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-commit.html"},
    {"name": "COMMIT PREPARED", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-commit-prepared.html"},
    {"name": "COPY", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-copy.html"},
    {"name": "CREATE AGGREGATE", "category": "", "passed": 1, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createaggregate.html"},
    {"name": "CREATE CAST", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-createcast.html"},
    {"name": "CREATE COLLATION", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createcollation.html"},
    {"name": "CREATE CONVERSION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createconversion.html"},
    {"name": "CREATE DATABASE", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-createdatabase.html"},
    {"name": "CREATE DOMAIN", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createdomain.html"},
    {"name": "CREATE EVENT TRIGGER", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createeventtrigger.html"},
    {"name": "CREATE EXTENSION", "category": "", "passed": 1, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createextension.html"},
    {"name": "CREATE FOREIGN DATA WRAPPER", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-createforeigndatawrapper.html"},
    {"name": "CREATE FOREIGN TABLE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createforeigntable.html"},
    {"name": "CREATE FUNCTION", "category": "", "passed": 8, "total": 8, "source": "https://www.postgresql.org/docs/9.4/sql-createfunction.html"},
    {"name": "CREATE INDEX", "category": "", "passed": 10, "total": 10, "source": "https://www.postgresql.org/docs/9.4/sql-createindex.html"},
    {"name": "CREATE LANGUAGE", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-createlanguage.html"},
    {"name": "CREATE OPERATOR", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createoperator.html"},
    {"name": "CREATE OPERATOR CLASS", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createopclass.html"},
    {"name": "CREATE ROLE", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-createrole.html"},
    {"name": "CREATE RULE", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-createrule.html"},
    {"name": "CREATE SCHEMA", "category": "", "passed": 7, "total": 7, "source": "https://www.postgresql.org/docs/9.4/sql-createschema.html"},
    {"name": "CREATE SEQUENCE", "category": "", "passed": 8, "total": 8, "source": "https://www.postgresql.org/docs/9.4/sql-createsequence.html"},
    {"name": "CREATE SERVER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createserver.html"},
    {"name": "CREATE TABLE", "category": "", "passed": 18, "total": 18, "source": "https://www.postgresql.org/docs/9.4/sql-createtable.html"},
    {"name": "CREATE TABLE AS", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createtableas.html"},
    {"name": "CREATE TABLE AS", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createtableas.html"},
    {"name": "CREATE TABLESPACE", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-createtablespace.html"},
    {"name": "CREATE TEXT SEARCH DICTIONARY", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createtsdictionary.html"},
    {"name": "CREATE TRIGGER", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-createtrigger.html"},
    {"name": "CREATE TYPE", "category": "", "passed": 10, "total": 13, "source": "https://www.postgresql.org/docs/9.4/sql-createtype.html"},
    {"name": "CREATE USER MAPPING", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-createusermapping.html"},
    {"name": "CREATE VIEW", "category": "", "passed": 7, "total": 7, "source": "https://www.postgresql.org/docs/9.4/sql-createview.html"},
    {"name": "DECLARE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-declare.html"},
    {"name": "DELETE", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-delete.html"},
    {"name": "DISCARD", "category": "", "passed": 9, "total": 9, "source": "https://www.postgresql.org/docs/9.4/sql-discard.html"},
    {"name": "DO", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-do.html"},
    {"name": "DROP AGGREGATE", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-dropaggregate.html"},
    {"name": "DROP CAST", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropcast.html"},
    {"name": "DROP COLLATION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropcollation.html"},
    {"name": "DROP CONVERSION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropconversion.html"},
    {"name": "DROP DOMAIN", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropdomain.html"},
    {"name": "DROP EVENT TRIGGER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropeventtrigger.html"},
    {"name": "DROP EXTENSION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropextension.html"},
    {"name": "DROP FOREIGN DATA WRAPPER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropforeigndatawrapper.html"},
    {"name": "DROP FOREIGN TABLE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropforeigntable.html"},
    {"name": "DROP FUNCTION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropfunction.html"},
    {"name": "DROP INDEX", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropindex.html"},
    {"name": "DROP LANGUAGE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droplanguage.html"},
    {"name": "DROP MATERIALIZED VIEW", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropmaterializedview.html"},
    {"name": "DROP OPERATOR", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-dropoperator.html"},
    {"name": "DROP OPERATOR CLASS", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropopclass.html"},
    {"name": "DROP OPERATOR FAMILY", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropopfamily.html"},
    {"name": "DROP ROLE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droprole.html"},
    {"name": "DROP RULE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droprule.html"},
    {"name": "DROP SCHEMA", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropschema.html"},
    {"name": "DROP SEQUENCE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropsequence.html"},
    {"name": "DROP SERVER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropserver.html"},
    {"name": "DROP TABLE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptable.html"},
    {"name": "DROP TABLESPACE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptablespace.html"},
    {"name": "DROP TEXT SEARCH CONFIGURATION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptsconfig.html"},
    {"name": "DROP TEXT SEARCH DICTIONARY", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptsdictionary.html"},
    {"name": "DROP TEXT SEARCH PARSER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptsparser.html"},
    {"name": "DROP TEXT SEARCH TEMPLATE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptstemplate.html"},
    {"name": "DROP TRIGGER", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptrigger.html"},
    {"name": "DROP TYPE", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-droptype.html"},
    {"name": "DROP USER MAPPING", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropusermapping.html"},
    {"name": "DROP VIEW", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-dropview.html"},
    {"name": "END", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-end.html"},
    {"name": "EXPLAIN", "category": "", "passed": 8, "total": 8, "source": "https://www.postgresql.org/docs/9.4/sql-explain.html"},
    {"name": "FETCH", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-fetch.html"},
    {"name": "GRANT", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-grant.html"},
    {"name": "INSERT", "category": "", "passed": 11, "total": 11, "source": "https://www.postgresql.org/docs/9.4/sql-insert.html"},
    {"name": "LISTEN", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-listen.html"},
    {"name": "LOCK", "category": "", "passed": 10, "total": 10, "source": "https://www.postgresql.org/docs/9.4/sql-lock.html"},
    {"name": "MOVE", "category": "", "passed": 5, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-move.html"},
    {"name": "NOTIFY", "category": "", "passed": 5, "total": 5, "source": "https://www.postgresql.org/docs/9.4/sql-notify.html"},
    {"name": "PREPARE", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-prepare.html"},
    {"name": "PREPARE TRANSACTION", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-prepare-transaction.html"},
    {"name": "REFRESH MATERIALIZED VIEW", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-refreshmaterializedview.html"},
    {"name": "REINDEX", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-reindex.html"},
    {"name": "RELEASE SAVEPOINT", "category": "", "passed": 6, "total": 6, "source": "https://www.postgresql.org/docs/9.4/sql-release-savepoint.html"},
    {"name": "REVOKE", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-revoke.html"},
    {"name": "ROLLBACK", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-rollback.html"},
    {"name": "ROLLBACK PREPARED", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-rollback-prepared.html"},
    {"name": "ROLLBACK TO SAVEPOINT", "category": "", "passed": 8, "total": 8, "source": "https://www.postgresql.org/docs/9.4/sql-rollback-to.html"},
    {"name": "SAVEPOINT", "category": "", "passed": 13, "total": 13, "source": "https://www.postgresql.org/docs/9.4/sql-savepoint.html"},
    {"name": "SECURITY LABEL", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-security-label.html"},
    {"name": "SELECT", "category": "", "passed": 20, "total": 20, "source": "https://www.postgresql.org/docs/9.4/sql-select.html"},
    {"name": "SELECT INTO", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-selectinto.html"},
    {"name": "SET", "category": "", "passed": 2, "total": 2, "source": "https://www.postgresql.org/docs/9.4/sql-set.html"},
    {"name": "SET ROLE", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-set-role.html"},
    {"name": "SET SESSION AUTHORIZATION", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-set-session-authorization.html"},
    {"name": "SET TRANSACTION", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-set-transaction.html"},
    {"name": "SHOW", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-show.html"},
    {"name": "TRUNCATE", "category": "", "passed": 3, "total": 3, "source": "https://www.postgresql.org/docs/9.4/sql-truncate.html"},
    {"name": "UNLISTEN", "category": "", "passed": 4, "total": 4, "source": "https://www.postgresql.org/docs/9.4/sql-unlisten.html"},
    {"name": "UPDATE", "category": "", "passed": 14, "total": 14, "source": "https://www.postgresql.org/docs/9.4/sql-update.html"},
    {"name": "VACUUM", "category": "", "passed": 1, "total": 1, "source": "https://www.postgresql.org/docs/9.4/sql-vacuum.html"},
    {"name": "VALUES", "category": "", "passed": 7, "total": 7, "source": "https://www.postgresql.org/docs/9.4/sql-values.html"}
  ]
}
