Thread
-
(SQL/PGQ) cache lookup failed for label
zengman <zengman@halodbtech.com> — 2026-05-08T08:39:46Z
Hi all, I noticed that the following SQL statement triggers the error message `cache lookup failed for label`. ```sql CREATE TABLE vt (id text PRIMARY KEY, name text, age int); CREATE TABLE et (id text PRIMARY KEY, src text REFERENCES vt(id), dst text REFERENCES vt(id)); INSERT INTO vt VALUES ('a', 'Alice', 30), ('b', 'Bob', 25); INSERT INTO et VALUES ('e1', 'a', 'b'); CREATE PROPERTY GRAPH g VERTEX TABLES (vt LABEL l1 PROPERTIES (name) LABEL l2 PROPERTIES (name, age)) EDGE TABLES (et SOURCE KEY (src) REFERENCES vt(id) DESTINATION KEY (dst) REFERENCES vt(id)); CREATE VIEW v1 AS SELECT * FROM GRAPH_TABLE(g MATCH (a IS l2)-[e IS et]->(b IS l2) COLUMNS (a.name, a.age, b.name AS bname)); ALTER PROPERTY GRAPH g ALTER VERTEX TABLE vt DROP LABEL l2; SELECT * FROM v1; ``` Here are the actual test results; it appears to be caused by missing dependency information. ```sql test=# CREATE TABLE vt (id text PRIMARY KEY, name text, age int); CREATE TABLE test=# CREATE TABLE et (id text PRIMARY KEY, src text REFERENCES vt(id), dst text REFERENCES vt(id)); CREATE TABLE test=# INSERT INTO vt VALUES ('a', 'Alice', 30), ('b', 'Bob', 25); INSERT 0 2 test=# INSERT INTO et VALUES ('e1', 'a', 'b'); INSERT 0 1 test=# CREATE PROPERTY GRAPH g VERTEX TABLES (vt LABEL l1 PROPERTIES (name) LABEL l2 PROPERTIES (name, age)) EDGE TABLES (et SOURCE KEY (src) REFERENCES vt(id) DESTINATION KEY (dst) REFERENCES vt(id)); CREATE PROPERTY GRAPH test=# CREATE VIEW v1 AS SELECT * FROM GRAPH_TABLE(g MATCH (a IS l2)-[e IS et]->(b IS l2) COLUMNS (a.name, a.age, b.name AS bname)); CREATE VIEW test=# ALTER PROPERTY GRAPH g ALTER VERTEX TABLE vt DROP LABEL l2; ALTER PROPERTY GRAPH test=# SELECT * FROM v1; 2026-05-08 15:38:37.121 CST [175953] ERROR: cache lookup failed for label 16472 2026-05-08 15:38:37.121 CST [175953] STATEMENT: SELECT * FROM v1; ERROR: cache lookup failed for label 16472 test=# ``` I've made some minor modifications; this is my diffs file. I'm not sure if anything is missing, so feel free to add to or supplement it. ```c diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index fdb8e67e1f5..6a73b74fc9b 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -2247,6 +2247,22 @@ find_expr_references_walker(Node *node, context->addrs); /* fall through to examine substructure */ } + if (IsA(node, GraphLabelRef)) + { + GraphLabelRef *lref = (GraphLabelRef *) node; + + add_object_address(PropgraphLabelRelationId, lref->labelid, 0, + context->addrs); + return false; + } + if (IsA(node, GraphPropertyRef)) + { + GraphPropertyRef *gpr = (GraphPropertyRef *) node; + + add_object_address(PropgraphPropertyRelationId, gpr->propid, 0, + context->addrs); + return false; + } else if (IsA(node, Query)) { /* Recurse into RTE subquery or not-yet-planned sublink subquery */ @@ -2277,9 +2293,31 @@ find_expr_references_walker(Node *node, switch (rte->rtekind) { case RTE_RELATION: + add_object_address(RelationRelationId, rte->relid, 0, + context->addrs); + break; case RTE_GRAPH_TABLE: add_object_address(RelationRelationId, rte->relid, 0, context->addrs); + + if (rte->graph_pattern) + { + GraphPattern *gp = rte->graph_pattern; + ListCell *lc1; + + foreach(lc1, gp->path_pattern_list) + { + List *path_term = lfirst_node(List, lc1); + ListCell *lc2; + + foreach(lc2, path_term) + { + GraphElementPattern *gep = lfirst_node(GraphElementPattern, lc2); + + find_expr_references_walker(gep->labelexpr, context); + } + } + } break; case RTE_JOIN: ``` Final running results ```sql test=# CREATE TABLE vt (id text PRIMARY KEY, name text, age int); CREATE TABLE et (id text PRIMARY KEY, src text REFERENCES vt(id), dst text REFERENCES vt(id)); INSERT INTO vt VALUES ('a', 'Alice', 30), ('b', 'Bob', 25); INSERT INTO et VALUES ('e1', 'a', 'b'); CREATE PROPERTY GRAPH g VERTEX TABLES (vt LABEL l1 PROPERTIES (name) LABEL l2 PROPERTIES (name, age)) EDGE TABLES (et SOURCE KEY (src) REFERENCES vt(id) DESTINATION KEY (dst) REFERENCES vt(id)); CREATE VIEW v1 AS SELECT * FROM GRAPH_TABLE(g MATCH (a IS l2)-[e IS et]->(b IS l2) COLUMNS (a.name, a.age, b.name AS bname)); ALTER PROPERTY GRAPH g ALTER VERTEX TABLE vt DROP LABEL l2; SELECT * FROM v1; CREATE TABLE CREATE TABLE INSERT 0 2 INSERT 0 1 CREATE PROPERTY GRAPH CREATE VIEW 2026-05-08 16:24:59.938 CST [182833] ERROR: cannot drop label l2 of property graph g because other objects depend on it 2026-05-08 16:24:59.938 CST [182833] DETAIL: view v1 depends on label l2 of property graph g 2026-05-08 16:24:59.938 CST [182833] HINT: Use DROP ... CASCADE to drop the dependent objects too. 2026-05-08 16:24:59.938 CST [182833] STATEMENT: ALTER PROPERTY GRAPH g ALTER VERTEX TABLE vt DROP LABEL l2; ERROR: cannot drop label l2 of property graph g because other objects depend on it DETAIL: view v1 depends on label l2 of property graph g HINT: Use DROP ... CASCADE to drop the dependent objects too. name | age | bname -------+-----+------- Alice | 30 | Bob (1 row) ``` -- regards, Man Zeng