选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 命令 / 其它对象

SQL COMMAND · 其它对象

CREATE PROPERTY GRAPH

定义一个新的 SQL 属性图

CREATE其它对象引入 19于 20 移除0 次语法变更

动词
CREATE
对象
PROPERTY GRAPH
引入版本
19
状态
于 20 移除
语法变更次数
0
手册小节数
6

本站手册 · 19 beta 3官方文档 ↗

版本轨迹

PostgreSQL 19 新增此命令。

PostgreSQL 19 beta 3 尚未正式发布;本页来自对应手册快照,内容仍可能变化。

语法铁道图 PostgreSQL 19

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

CREATE TEMP TEMPORARY PROPERTY GRAPH name VERTEX NODE TABLES ( vertex_table_definition , ) EDGE RELATIONSHIP TABLES ( edge_table_definition , )
vertex_table_definition
vertex_table_name AS alias KEY ( column_name , ) element_table_label_and_properties
edge_table_definition
edge_table_name AS alias KEY ( column_name , ) SOURCE KEY ( column_name , ) REFERENCES source_table ( column_name , ) DESTINATION KEY ( column_name , ) REFERENCES dest_table ( column_name , ) element_table_label_and_properties
element_table_label_and_properties
NO PROPERTIES PROPERTIES ALL COLUMNS PROPERTIES ( expression AS property_name , ) LABEL label_name DEFAULT LABEL NO PROPERTIES PROPERTIES ALL COLUMNS PROPERTIES ( expression AS property_name , )

语法概要

CREATE [ TEMP | TEMPORARY ] PROPERTY GRAPH name
    [ {VERTEX|NODE} TABLES ( vertex_table_definition [, ...] ) ]
    [ {EDGE|RELATIONSHIP} TABLES ( edge_table_definition [, ...] ) ]

where vertex_table_definition is:
vertex_table_name [ AS alias ] [ KEY ( column_name [, ...] ) ] [ element_table_label_and_properties ]

and edge_table_definition is:
edge_table_name [ AS alias ] [ KEY ( column_name [, ...] ) ]
        SOURCE [ KEY ( column_name [, ...] ) REFERENCES ] source_table [ ( column_name [, ...] ) ]
        DESTINATION [ KEY ( column_name [, ...] ) REFERENCES ] dest_table [ ( column_name [, ...] ) ]
        [ element_table_label_and_properties ]

and element_table_label_and_properties is either:

    NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { expression [ AS property_name ] } [, ...] )

or:

   { { LABEL label_name | DEFAULT LABEL } [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( { expression [ AS property_name ] } [, ...] ) ] } [...]

PostgreSQL 19 beta 3 手册 · 查看完整参考页

描述

CREATE PROPERTY GRAPH 定义一个属性图。属性图由顶点和边组成,二者合称为元素;每个元素都带有关联的标签和属性,并且可以使用 SELECTGRAPH_TABLE 子句以及特殊的路径匹配语法进行查询。图中的数据存储在普通表中(或者视图、外部表等)。每个顶点或边都对应一张表。属性图定义会把这些表关联起来,形成一个可以使用图查询技术进行查询的图结构。

CREATE PROPERTY GRAPH 不会实际物化一个图。因此,它类似于 CREATE VIEW,只记录一个结构,而该结构仅在查询所定义对象时使用。

如果给出了模式名(例如,CREATE PROPERTY GRAPH myschema.mygraph ...),则属性图会创建在指定模式中。否则,它会创建在当前模式中。临时属性图存在于一个特殊模式中,因此在创建临时属性图时不能给出模式名。属性图与表以及其他关系类型共享一个命名空间,因此属性图的名称必须与同一模式中任何其他关系(表、序列、索引、视图、物化视图或外部表)的名称不同。

参数

name

新属性图的名称(可以带模式限定)。

VERTEX/NODE
EDGE/RELATIONSHIP

这些关键字分别是同义词。

vertex_table_name

将在新属性图中包含顶点的表名称。

edge_table_name

将在新属性图中包含边的表名称。

alias

顶点表或边表的唯一标识符。默认值为表名。别名在属性图定义中必须唯一(跨所有顶点表和边表定义)。因此,如果同一张表被多次用作顶点表或边表,则至少其中一个必须显式指定别名,以便将它们区分开来。

KEY ( column_name [, ...] )

一组唯一标识顶点表或边表中某一行的列。默认使用主键。

source_table
dest_table

边表所链接到的顶点表。它们分别引用源顶点表和目标顶点表的别名。

KEY ( column_name [, ...] ) REFERENCES ... ( column_name [, ...] )

连接边表与源顶点表或目标顶点表的两组列,类似于外键关系。如果这两张表之间已经存在外键约束,则默认使用该约束。

element_table_label_and_properties

定义元素(顶点或边)表的标签和属性。每个元素至少有一个标签。默认情况下,标签与元素表别名相同。这可以显式指定为 DEFAULT LABEL。也可以指定一个或多个自由选择的标签名。(标签名在属性图中不必唯一。将相同的标签赋给不同元素是有用的。)每个标签都有一个属性列表,该列表可以为空。默认情况下,表的所有列都会自动暴露为属性。这可以显式指定为 PROPERTIES ALL COLUMNS。也可以指定一个表达式列表作为属性,这些表达式可以引用底层表的列。如果这些表达式不是普通的列引用,则还必须显式指定属性名。

注意

属性图定义必须满足以下一致性检查:

  • 在属性图中,对不同属性图元素使用的同名标签必须具有相同数量的属性,而且这些属性必须具有相同的名称。例如,下面的写法是允许的:

    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (x, y),
            v2 LABEL foo PROPERTIES (x, y)
        ) ...
    

    但下面这种写法不允许:

    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (x, y),
            v2 LABEL foo PROPERTIES (z)
        ) ...
    
  • 在属性图中,所有同名属性都必须具有相同的数据类型,而不管它们位于哪个标签上。例如,下面的写法是允许的:

    CREATE TABLE v1 (a int, b int);
    CREATE TABLE v2 (a int, b int);
    
    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (a, b),
            v2 LABEL bar PROPERTIES (a, b)
        ) ...
    

    但下面这种写法不允许:

    CREATE TABLE v1 (a int, b int);
    CREATE TABLE v2 (a int, b varchar);
    
    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (a, b),
            v2 LABEL bar PROPERTIES (a, b)
        ) ...
    
  • 对于每个属性图元素,所有同名属性在每个标签上的表达式都必须相同。例如,下面的写法是允许的:

    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (a * 2 AS x) LABEL bar PROPERTIES (a * 2 AS x)
        ) ...
    

    但下面这种写法不允许:

    CREATE PROPERTY GRAPH g1
        VERTEX TABLES (
            v1 LABEL foo PROPERTIES (a * 2 AS x) LABEL bar PROPERTIES (a * 10 AS x)
        ) ...
    

属性图使用 SELECTGRAPH_TABLE 子句进行查询。

GRAPH_TABLE 子句所依赖的基础关系的访问权限,由执行查询的用户权限决定,而不是由属性图所有者决定。因此,属性图的使用者必须对属性图以及 GRAPH_TABLE 子句所依赖的基础关系具备相应权限。

示例

CREATE PROPERTY GRAPH g1
    VERTEX TABLES (v1, v2, v3)
    EDGE TABLES (e1 SOURCE v1 DESTINATION v2,
                 e2 SOURCE v1 DESTINATION v3);

兼容性

CREATE PROPERTY GRAPH 符合 ISO/IEC 9075-16(SQL/PGQ)。

另请参阅

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 20← 19移除此命令

  2. PostgreSQL 19← 18新增此命令

同组命令

命令动词对象版本变动最近变更
OTHER OBJECTS其它对象6 条
COMMENTCOMMENT 203 次
定义或修改对象的注释现存
REPACKREPACK
重写表以回收磁盘空间现存
ALTER LARGE OBJECTALTERLARGE OBJECT 141 次
更改一个大对象的定义现存
CREATE PROPERTY GRAPHCREATEPROPERTY GRAPH
定义一个新的 SQL 属性图于 20 移除
ALTER PROPERTY GRAPHALTERPROPERTY GRAPH
更改 SQL 属性图的定义于 20 移除
DROP PROPERTY GRAPHDROPPROPERTY GRAPH
删除 SQL 属性图于 20 移除

本站手册收录版本:19 beta 3

内容来自本站 PostgreSQL 手册译文,最后同步 2026-09-15。

译文问题请提交到 pgsty/pgdoc;本站展示或功能问题请提交到 pgsty/pgweb