1
0
mirror of https://github.com/postgres/postgres.git synced 2026-10-23 13:29:09 +03:00

Fix properties orphaned by dropping a label

AlterPropGraph() cleans up pg_propgraph_property entries that are
orphaned by dropping an element or by dropping properties associated
with an element.  But it did not clean up pg_propgraph_property
entries that are orphaned by dropping labels associated with an
element.  Fix this missing case.

Author: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Author: zengman <zengman@halodbtech.com>
Discussion: https://www.postgresql.org/message-id/flat/tencent_76F6ACA2364EAA1E5DBD7A47%40qq.com
This commit is contained in:
Peter Eisentraut
2026-07-05 13:47:18 +02:00
parent a8c2547eaa
commit 0e4f0827f6
3 changed files with 17 additions and 13 deletions

View File

@@ -1674,7 +1674,7 @@ AlterPropGraph(ParseState *pstate, const AlterPropGraphStmt *stmt)
} }
/* Remove any orphaned pg_propgraph_property entries */ /* Remove any orphaned pg_propgraph_property entries */
if (stmt->drop_properties || stmt->drop_vertex_tables || stmt->drop_edge_tables) if (stmt->drop_properties || stmt->drop_vertex_tables || stmt->drop_edge_tables || stmt->drop_label)
{ {
foreach_oid(propoid, get_graph_property_ids(pgrelid)) foreach_oid(propoid, get_graph_property_ids(pgrelid))
{ {

View File

@@ -91,6 +91,11 @@ ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 ADD PROPERTIES (k *
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (k); ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (k);
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (yy); -- error ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (yy); -- error
ERROR: property graph "g4" element "t2" label "t2" has no property "yy" ERROR: property graph "g4" element "t2" label "t2" has no property "yy"
-- Dropping a label should drop only orphaned properties. zz is orphaned because
-- it is only associated with the dropped label t3l2, while x is not orphaned
-- because it remains associated with t3l1. We will verify this in the
-- information schema queries outputs below.
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t3 DROP LABEL t3l2;
CREATE TABLE t11 (a int PRIMARY KEY); CREATE TABLE t11 (a int PRIMARY KEY);
CREATE TABLE t12 (b int PRIMARY KEY); CREATE TABLE t12 (b int PRIMARY KEY);
CREATE TABLE t13 ( CREATE TABLE t13 (
@@ -448,7 +453,6 @@ SELECT * FROM information_schema.pg_element_table_labels ORDER BY property_graph
regression | create_property_graph_tests | g4 | t1 | t1 regression | create_property_graph_tests | g4 | t1 | t1
regression | create_property_graph_tests | g4 | t2 | t2 regression | create_property_graph_tests | g4 | t2 | t2
regression | create_property_graph_tests | g4 | t3 | t3l1 regression | create_property_graph_tests | g4 | t3 | t3l1
regression | create_property_graph_tests | g4 | t3 | t3l2
regression | create_property_graph_tests | g5 | t11 | t11 regression | create_property_graph_tests | g5 | t11 | t11
regression | create_property_graph_tests | g5 | t12 | t12 regression | create_property_graph_tests | g5 | t12 | t12
regression | create_property_graph_tests | g5 | t13 | t13 regression | create_property_graph_tests | g5 | t13 | t13
@@ -460,7 +464,7 @@ SELECT * FROM information_schema.pg_element_table_labels ORDER BY property_graph
regression | create_property_graph_tests | gt | e | e regression | create_property_graph_tests | gt | e | e
regression | create_property_graph_tests | gt | v1 | v1 regression | create_property_graph_tests | gt | v1 | v1
regression | create_property_graph_tests | gt | v2 | v2 regression | create_property_graph_tests | gt | v2 | v2
(26 rows) (25 rows)
SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_graph_name, element_table_alias, property_name; SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_graph_name, element_table_alias, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | element_table_alias | property_name | property_expression property_graph_catalog | property_graph_schema | property_graph_name | element_table_alias | property_name | property_expression
@@ -494,7 +498,6 @@ SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_g
regression | create_property_graph_tests | g4 | t2 | kk | (k * 2) regression | create_property_graph_tests | g4 | t2 | kk | (k * 2)
regression | create_property_graph_tests | g4 | t3 | x | x regression | create_property_graph_tests | g4 | t3 | x | x
regression | create_property_graph_tests | g4 | t3 | yy | y regression | create_property_graph_tests | g4 | t3 | yy | y
regression | create_property_graph_tests | g4 | t3 | zz | z
regression | create_property_graph_tests | g5 | t11 | a | a regression | create_property_graph_tests | g5 | t11 | a | a
regression | create_property_graph_tests | g5 | t12 | b | b regression | create_property_graph_tests | g5 | t12 | b | b
regression | create_property_graph_tests | g5 | t13 | c | c regression | create_property_graph_tests | g5 | t13 | c | c
@@ -519,7 +522,7 @@ SELECT * FROM information_schema.pg_element_table_properties ORDER BY property_g
regression | create_property_graph_tests | gt | v1 | b | b regression | create_property_graph_tests | gt | v1 | b | b
regression | create_property_graph_tests | gt | v2 | m | m regression | create_property_graph_tests | gt | v2 | m | m
regression | create_property_graph_tests | gt | v2 | n | n regression | create_property_graph_tests | gt | v2 | n | n
(54 rows) (53 rows)
SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_name, label_name, property_name; SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_name, label_name, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | label_name | property_name property_graph_catalog | property_graph_schema | property_graph_name | label_name | property_name
@@ -559,8 +562,6 @@ SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_nam
regression | create_property_graph_tests | g4 | t2 | kk regression | create_property_graph_tests | g4 | t2 | kk
regression | create_property_graph_tests | g4 | t3l1 | x regression | create_property_graph_tests | g4 | t3l1 | x
regression | create_property_graph_tests | g4 | t3l1 | yy regression | create_property_graph_tests | g4 | t3l1 | yy
regression | create_property_graph_tests | g4 | t3l2 | x
regression | create_property_graph_tests | g4 | t3l2 | zz
regression | create_property_graph_tests | g5 | t11 | a regression | create_property_graph_tests | g5 | t11 | a
regression | create_property_graph_tests | g5 | t12 | b regression | create_property_graph_tests | g5 | t12 | b
regression | create_property_graph_tests | g5 | t13 | c regression | create_property_graph_tests | g5 | t13 | c
@@ -585,7 +586,7 @@ SELECT * FROM information_schema.pg_label_properties ORDER BY property_graph_nam
regression | create_property_graph_tests | gt | v1 | b regression | create_property_graph_tests | gt | v1 | b
regression | create_property_graph_tests | gt | v2 | m regression | create_property_graph_tests | gt | v2 | m
regression | create_property_graph_tests | gt | v2 | n regression | create_property_graph_tests | gt | v2 | n
(61 rows) (59 rows)
SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_name; SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_name;
property_graph_catalog | property_graph_schema | property_graph_name | label_name property_graph_catalog | property_graph_schema | property_graph_name | label_name
@@ -604,7 +605,6 @@ SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_n
regression | create_property_graph_tests | g4 | t1 regression | create_property_graph_tests | g4 | t1
regression | create_property_graph_tests | g4 | t2 regression | create_property_graph_tests | g4 | t2
regression | create_property_graph_tests | g4 | t3l1 regression | create_property_graph_tests | g4 | t3l1
regression | create_property_graph_tests | g4 | t3l2
regression | create_property_graph_tests | g5 | t11 regression | create_property_graph_tests | g5 | t11
regression | create_property_graph_tests | g5 | t12 regression | create_property_graph_tests | g5 | t12
regression | create_property_graph_tests | g5 | t13 regression | create_property_graph_tests | g5 | t13
@@ -616,7 +616,7 @@ SELECT * FROM information_schema.pg_labels ORDER BY property_graph_name, label_n
regression | create_property_graph_tests | gt | e regression | create_property_graph_tests | gt | e
regression | create_property_graph_tests | gt | v1 regression | create_property_graph_tests | gt | v1
regression | create_property_graph_tests | gt | v2 regression | create_property_graph_tests | gt | v2
(26 rows) (25 rows)
SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_name, property_name; SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_name, property_name;
property_graph_catalog | property_graph_schema | property_graph_name | property_name | data_type | character_maximum_length | character_octet_length | character_set_catalog | character_set_schema | character_set_name | collation_catalog | collation_schema | collation_name | numeric_precision | numeric_precision_radix | numeric_scale | datetime_precision | interval_type | interval_precision | user_defined_type_catalog | user_defined_type_schema | user_defined_type_name | scope_catalog | scope_schema | scope_name | maximum_cardinality | dtd_identifier property_graph_catalog | property_graph_schema | property_graph_name | property_name | data_type | character_maximum_length | character_octet_length | character_set_catalog | character_set_schema | character_set_name | collation_catalog | collation_schema | collation_name | numeric_precision | numeric_precision_radix | numeric_scale | datetime_precision | interval_type | interval_precision | user_defined_type_catalog | user_defined_type_schema | user_defined_type_name | scope_catalog | scope_schema | scope_name | maximum_cardinality | dtd_identifier
@@ -642,7 +642,6 @@ SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_
regression | create_property_graph_tests | g4 | t | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | t regression | create_property_graph_tests | g4 | t | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | t
regression | create_property_graph_tests | g4 | x | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | x regression | create_property_graph_tests | g4 | x | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | x
regression | create_property_graph_tests | g4 | yy | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | yy regression | create_property_graph_tests | g4 | yy | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | yy
regression | create_property_graph_tests | g4 | zz | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | zz
regression | create_property_graph_tests | g5 | a | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | a regression | create_property_graph_tests | g5 | a | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | a
regression | create_property_graph_tests | g5 | b | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | b regression | create_property_graph_tests | g5 | b | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | b
regression | create_property_graph_tests | g5 | c | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | c regression | create_property_graph_tests | g5 | c | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | c
@@ -660,7 +659,7 @@ SELECT * FROM information_schema.pg_property_data_types ORDER BY property_graph_
regression | create_property_graph_tests | gt | k2 | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | k2 regression | create_property_graph_tests | gt | k2 | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | k2
regression | create_property_graph_tests | gt | m | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | m regression | create_property_graph_tests | gt | m | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | m
regression | create_property_graph_tests | gt | n | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | n regression | create_property_graph_tests | gt | n | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | n
(39 rows) (38 rows)
SELECT * FROM information_schema.pg_property_graph_privileges WHERE grantee LIKE 'regress%' ORDER BY property_graph_name, grantor, grantee, privilege_type; SELECT * FROM information_schema.pg_property_graph_privileges WHERE grantee LIKE 'regress%' ORDER BY property_graph_name, grantor, grantee, privilege_type;
grantor | grantee | property_graph_catalog | property_graph_schema | property_graph_name | privilege_type | is_grantable grantor | grantee | property_graph_catalog | property_graph_schema | property_graph_name | privilege_type | is_grantable
@@ -810,7 +809,7 @@ CREATE PROPERTY GRAPH create_property_graph_tests.g4
VERTEX TABLES ( VERTEX TABLES (
t1 KEY (a) NO PROPERTIES, t1 KEY (a) NO PROPERTIES,
t2 KEY (i) PROPERTIES ((i + j) AS i_j, (k * 2) AS kk), t2 KEY (i) PROPERTIES ((i + j) AS i_j, (k * 2) AS kk),
t3 KEY (x) LABEL t3l1 PROPERTIES (x, y AS yy) LABEL t3l2 PROPERTIES (x, z AS zz) t3 KEY (x) LABEL t3l1 PROPERTIES (x, y AS yy)
) )
EDGE TABLES ( EDGE TABLES (
e1 KEY (a, i) SOURCE KEY (a) REFERENCES t1 (a) DESTINATION KEY (i) REFERENCES t2 (i) PROPERTIES (a, i, t), e1 KEY (a, i) SOURCE KEY (a) REFERENCES t1 (a) DESTINATION KEY (i) REFERENCES t2 (i) PROPERTIES (a, i, t),

View File

@@ -81,6 +81,11 @@ CREATE PROPERTY GRAPH g4
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 ADD PROPERTIES (k * 2 AS kk); ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 ADD PROPERTIES (k * 2 AS kk);
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (k); ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (k);
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (yy); -- error ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t2 ALTER LABEL t2 DROP PROPERTIES (yy); -- error
-- Dropping a label should drop only orphaned properties. zz is orphaned because
-- it is only associated with the dropped label t3l2, while x is not orphaned
-- because it remains associated with t3l1. We will verify this in the
-- information schema queries outputs below.
ALTER PROPERTY GRAPH g4 ALTER VERTEX TABLE t3 DROP LABEL t3l2;
CREATE TABLE t11 (a int PRIMARY KEY); CREATE TABLE t11 (a int PRIMARY KEY);
CREATE TABLE t12 (b int PRIMARY KEY); CREATE TABLE t12 (b int PRIMARY KEY);