]> git.ipfire.org Git - thirdparty/postgresql.git/commit
SQL Property Graph Queries (SQL/PGQ)
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 16 Mar 2026 09:14:18 +0000 (10:14 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 16 Mar 2026 09:14:18 +0000 (10:14 +0100)
commit2f094e7ac691abc9d2fe0f4dcf0feac4a6ce1d9c
treeb25effaab1cb8955f997638e18e4841cc57aca88
parentfd6ecbfa75ff0316f17c75d3931f20eb4f6e1231
SQL Property Graph Queries (SQL/PGQ)

Implementation of SQL property graph queries, according to SQL/PGQ
standard (ISO/IEC 9075-16:2023).

This adds:

- GRAPH_TABLE table function for graph pattern matching
- DDL commands CREATE/ALTER/DROP PROPERTY GRAPH
- several new system catalogs and information schema views
- psql \dG command
- pg_get_propgraphdef() function for pg_dump and psql

A property graph is a relation with a new relkind RELKIND_PROPGRAPH.
It acts like a view in many ways.  It is rewritten to a standard
relational query in the rewriter.  Access privileges act similar to a
security invoker view.  (The security definer variant is not currently
implemented.)

Starting documentation can be found in doc/src/sgml/ddl.sgml and
doc/src/sgml/queries.sgml.

Author: Peter Eisentraut <peter@eisentraut.org>
Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Junwang Zhao <zhjwpku@gmail.com>
Reviewed-by: Ajay Pal <ajay.pal.k@gmail.com>
Reviewed-by: Henson Choi <assam258@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/a855795d-e697-4fa5-8698-d20122126567@eisentraut.org
122 files changed:
contrib/pg_overexplain/expected/pg_overexplain.out
contrib/pg_overexplain/pg_overexplain.c
contrib/pg_overexplain/sql/pg_overexplain.sql
doc/src/sgml/catalogs.sgml
doc/src/sgml/ddl.sgml
doc/src/sgml/features.sgml
doc/src/sgml/func/func-info.sgml
doc/src/sgml/information_schema.sgml
doc/src/sgml/keywords/sql2023-16-nonreserved.txt [new file with mode: 0644]
doc/src/sgml/keywords/sql2023-16-reserved.txt [new file with mode: 0644]
doc/src/sgml/queries.sgml
doc/src/sgml/ref/allfiles.sgml
doc/src/sgml/ref/alter_extension.sgml
doc/src/sgml/ref/alter_property_graph.sgml [new file with mode: 0644]
doc/src/sgml/ref/comment.sgml
doc/src/sgml/ref/create_property_graph.sgml [new file with mode: 0644]
doc/src/sgml/ref/drop_property_graph.sgml [new file with mode: 0644]
doc/src/sgml/ref/grant.sgml
doc/src/sgml/ref/psql-ref.sgml
doc/src/sgml/ref/revoke.sgml
doc/src/sgml/ref/security_label.sgml
doc/src/sgml/ref/select.sgml
doc/src/sgml/reference.sgml
src/backend/catalog/aclchk.c
src/backend/catalog/dependency.c
src/backend/catalog/information_schema.sql
src/backend/catalog/objectaddress.c
src/backend/catalog/pg_class.c
src/backend/catalog/sql_features.txt
src/backend/commands/Makefile
src/backend/commands/alter.c
src/backend/commands/dropcmds.c
src/backend/commands/event_trigger.c
src/backend/commands/meson.build
src/backend/commands/propgraphcmds.c [new file with mode: 0644]
src/backend/commands/seclabel.c
src/backend/commands/tablecmds.c
src/backend/executor/execMain.c
src/backend/nodes/nodeFuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/print.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/prep/prepjointree.c
src/backend/parser/Makefile
src/backend/parser/analyze.c
src/backend/parser/gram.y
src/backend/parser/meson.build
src/backend/parser/parse_agg.c
src/backend/parser/parse_clause.c
src/backend/parser/parse_collate.c
src/backend/parser/parse_expr.c
src/backend/parser/parse_func.c
src/backend/parser/parse_graphtable.c [new file with mode: 0644]
src/backend/parser/parse_relation.c
src/backend/parser/parse_target.c
src/backend/parser/scan.l
src/backend/rewrite/Makefile
src/backend/rewrite/meson.build
src/backend/rewrite/rewriteGraphTable.c [new file with mode: 0644]
src/backend/rewrite/rewriteHandler.c
src/backend/tcop/utility.c
src/backend/utils/adt/acl.c
src/backend/utils/adt/ruleutils.c
src/backend/utils/cache/lsyscache.c
src/backend/utils/cache/plancache.c
src/bin/pg_dump/common.c
src/bin/pg_dump/dumputils.c
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/t/002_pg_dump.pl
src/bin/psql/command.c
src/bin/psql/describe.c
src/bin/psql/help.c
src/bin/psql/tab-complete.in.c
src/fe_utils/psqlscan.l
src/include/catalog/Makefile
src/include/catalog/catversion.h
src/include/catalog/meson.build
src/include/catalog/pg_class.h
src/include/catalog/pg_proc.dat
src/include/catalog/pg_propgraph_element.h [new file with mode: 0644]
src/include/catalog/pg_propgraph_element_label.h [new file with mode: 0644]
src/include/catalog/pg_propgraph_label.h [new file with mode: 0644]
src/include/catalog/pg_propgraph_label_property.h [new file with mode: 0644]
src/include/catalog/pg_propgraph_property.h [new file with mode: 0644]
src/include/commands/propgraphcmds.h [new file with mode: 0644]
src/include/nodes/parsenodes.h
src/include/nodes/primnodes.h
src/include/parser/analyze.h
src/include/parser/kwlist.h
src/include/parser/parse_graphtable.h [new file with mode: 0644]
src/include/parser/parse_node.h
src/include/parser/parse_relation.h
src/include/rewrite/rewriteGraphTable.h [new file with mode: 0644]
src/include/tcop/cmdtaglist.h
src/include/utils/acl.h
src/include/utils/lsyscache.h
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/test/ecpg_schedule
src/interfaces/ecpg/test/expected/sql-sqlpgq.c [new file with mode: 0644]
src/interfaces/ecpg/test/expected/sql-sqlpgq.stderr [new file with mode: 0644]
src/interfaces/ecpg/test/expected/sql-sqlpgq.stdout [new file with mode: 0644]
src/interfaces/ecpg/test/sql/.gitignore
src/interfaces/ecpg/test/sql/Makefile
src/interfaces/ecpg/test/sql/meson.build
src/interfaces/ecpg/test/sql/sqlpgq.pgc [new file with mode: 0644]
src/test/regress/expected/alter_generic.out
src/test/regress/expected/create_property_graph.out [new file with mode: 0644]
src/test/regress/expected/graph_table.out [new file with mode: 0644]
src/test/regress/expected/graph_table_rls.out [new file with mode: 0644]
src/test/regress/expected/object_address.out
src/test/regress/expected/oidjoins.out
src/test/regress/expected/privileges.out
src/test/regress/parallel_schedule
src/test/regress/sql/alter_generic.sql
src/test/regress/sql/create_property_graph.sql [new file with mode: 0644]
src/test/regress/sql/graph_table.sql [new file with mode: 0644]
src/test/regress/sql/graph_table_rls.sql [new file with mode: 0644]
src/test/regress/sql/object_address.sql
src/test/regress/sql/privileges.sql
src/tools/pgindent/typedefs.list