SQL COMMAND · 其它对象
CREATE PROPERTY GRAPH
定义一个新的 SQL 属性图
CREATE其它对象引入 19于 20 移除0 次语法变更
- 动词
CREATE- 对象
PROPERTY GRAPH- 分组
- 其它对象
- 引入版本
- 19
- 状态
- 于 20 移除
- 语法变更次数
- 0
- 手册小节数
- 6
版本轨迹
PostgreSQL 19 新增此命令。
PostgreSQL 19 beta 3 尚未正式发布;本页来自对应手册快照,内容仍可能变化。
语法铁道图 PostgreSQL 19
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
vertex_table_definition
edge_table_definition
element_table_label_and_properties
语法概要
CREATE [ TEMP | TEMPORARY ] PROPERTY GRAPHname[ {VERTEX|NODE} TABLES (vertex_table_definition[, ...] ) ] [ {EDGE|RELATIONSHIP} TABLES (edge_table_definition[, ...] ) ] wherevertex_table_definitionis:vertex_table_name[ ASalias] [ KEY (column_name[, ...] ) ] [element_table_label_and_properties] andedge_table_definitionis:edge_table_name[ ASalias] [ 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] andelement_table_label_and_propertiesis either: NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( {expression[ ASproperty_name] } [, ...] ) or: { { LABELlabel_name| DEFAULT LABEL } [ NO PROPERTIES | PROPERTIES ALL COLUMNS | PROPERTIES ( {expression[ ASproperty_name] } [, ...] ) ] } [...]
描述
CREATE PROPERTY GRAPH 定义一个属性图。属性图由顶点和边组成,二者合称为元素;每个元素都带有关联的标签和属性,并且可以使用 SELECT 的 GRAPH_TABLE 子句以及特殊的路径匹配语法进行查询。图中的数据存储在普通表中(或者视图、外部表等)。每个顶点或边都对应一张表。属性图定义会把这些表关联起来,形成一个可以使用图查询技术进行查询的图结构。
CREATE PROPERTY GRAPH 不会实际物化一个图。因此,它类似于 CREATE VIEW,只记录一个结构,而该结构仅在查询所定义对象时使用。
如果给出了模式名(例如,CREATE PROPERTY GRAPH myschema.mygraph ...),则属性图会创建在指定模式中。否则,它会创建在当前模式中。临时属性图存在于一个特殊模式中,因此在创建临时属性图时不能给出模式名。属性图与表以及其他关系类型共享一个命名空间,因此属性图的名称必须与同一模式中任何其他关系(表、序列、索引、视图、物化视图或外部表)的名称不同。
参数
name新属性图的名称(可以带模式限定)。
VERTEX/NODEEDGE/RELATIONSHIP这些关键字分别是同义词。
vertex_table_name将在新属性图中包含顶点的表名称。
edge_table_name将在新属性图中包含边的表名称。
alias顶点表或边表的唯一标识符。默认值为表名。别名在属性图定义中必须唯一(跨所有顶点表和边表定义)。因此,如果同一张表被多次用作顶点表或边表,则至少其中一个必须显式指定别名,以便将它们区分开来。
KEY (column_name[, ...] )一组唯一标识顶点表或边表中某一行的列。默认使用主键。
source_tabledest_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) ) ...
属性图使用 SELECT 的 GRAPH_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)。
另请参阅
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 20← 19移除此命令
PostgreSQL 19← 18新增此命令
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
COMMENT | COMMENT | — | 203 次 | |
| 定义或修改对象的注释 | 现存 | |||
REPACK | REPACK | — | — | |
| 重写表以回收磁盘空间 | 现存 | |||
ALTER LARGE OBJECT | ALTER | LARGE OBJECT | 141 次 | |
| 更改一个大对象的定义 | 现存 | |||
CREATE PROPERTY GRAPH | CREATE | PROPERTY GRAPH | — | |
| 定义一个新的 SQL 属性图 | 于 20 移除 | |||
ALTER PROPERTY GRAPH | ALTER | PROPERTY GRAPH | — | |
| 更改 SQL 属性图的定义 | 于 20 移除 | |||
DROP PROPERTY GRAPH | DROP | PROPERTY GRAPH | — | |
| 删除 SQL 属性图 | 于 20 移除 | |||