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:
@@ -1674,7 +1674,7 @@ AlterPropGraph(ParseState *pstate, const AlterPropGraphStmt *stmt)
|
||||
}
|
||||
|
||||
/* 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))
|
||||
{
|
||||
|
||||
@@ -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 (yy); -- error
|
||||
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 t12 (b int PRIMARY KEY);
|
||||
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 | t2 | t2
|
||||
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 | t12 | t12
|
||||
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 | v1 | v1
|
||||
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;
|
||||
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 | t3 | x | x
|
||||
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 | t12 | b | b
|
||||
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 | v2 | m | m
|
||||
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;
|
||||
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 | t3l1 | x
|
||||
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 | t12 | b
|
||||
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 | v2 | m
|
||||
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;
|
||||
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 | t2
|
||||
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 | t12
|
||||
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 | v1
|
||||
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;
|
||||
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 | 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 | 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 | b | integer | | | | | | regression | | | | | | | | | regression | pg_catalog | int4 | | | | | b
|
||||
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 | m | text | | | | | | regression | | | | | | | | | regression | pg_catalog | text | | | | | m
|
||||
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;
|
||||
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 (
|
||||
t1 KEY (a) NO PROPERTIES,
|
||||
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 (
|
||||
e1 KEY (a, i) SOURCE KEY (a) REFERENCES t1 (a) DESTINATION KEY (i) REFERENCES t2 (i) PROPERTIES (a, i, t),
|
||||
|
||||
@@ -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 DROP PROPERTIES (k);
|
||||
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 t12 (b int PRIMARY KEY);
|
||||
|
||||
Reference in New Issue
Block a user