(SQL/PGQ) Clean up orphaned properties when dropping a label

zengman <zengman@halodbtech.com>

From: zengman <zengman@halodbtech.com>
To: pgsql-hackers <pgsql-hackers@lists.postgresql.org>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Peter Eisentraut <peter@eisentraut.org>
Date: 2026-06-05T14:29:12Z
Lists: pgsql-hackers

Attachments

Hi all,

I noticed that ALTER PROPERTY GRAPH ... DROP LABEL doesn't clean up
orphaned pg_propgraph_property entries. The cleanup condition in
RemoveRelations() only checks for drop_properties,
drop_vertex_tables, and drop_edge_tables, but not drop_label.

Before fix:

```sql
postgres@zxm-VMware-Virtual-Platform:~/code/postgres$ psql
psql (19beta1)
Type "help" for help.

postgres=# CREATE TABLE v4 (a int PRIMARY KEY, b int, c int);
CREATE TABLE
postgres=# CREATE PROPERTY GRAPH g5
    VERTEX TABLES (
        v4 LABEL l1 PROPERTIES (a, b, c)
           LABEL l2 PROPERTIES (a)
    );
CREATE PROPERTY GRAPH
postgres=# ALTER PROPERTY GRAPH g5 ALTER VERTEX TABLE v4 DROP LABEL l1;
ALTER PROPERTY GRAPH
postgres=# SELECT pgpname FROM pg_propgraph_property
    WHERE pgppgid = 'g5'::regclass ORDER BY pgpname;
 pgpname
---------
 a
 b
 c
(3 rows)
```

After fix:
```sql
postgres@zxm-VMware-Virtual-Platform:~/code/postgres$ psql
psql (19beta1)
Type "help" for help.

postgres=# CREATE TABLE v4 (a int PRIMARY KEY, b int, c int);
CREATE TABLE
postgres=# CREATE PROPERTY GRAPH g5
    VERTEX TABLES (
        v4 LABEL l1 PROPERTIES (a, b, c)
           LABEL l2 PROPERTIES (a)
    );
CREATE PROPERTY GRAPH
postgres=# ALTER PROPERTY GRAPH g5 ALTER VERTEX TABLE v4 DROP LABEL l1;
ALTER PROPERTY GRAPH
postgres=# SELECT pgpname FROM pg_propgraph_property
    WHERE pgppgid = 'g5'::regclass ORDER BY pgpname;
 pgpname
---------
 a
(1 row)
```

```sql
CREATE TABLE v4 (a int PRIMARY KEY, b int, c int);
CREATE PROPERTY GRAPH g5
    VERTEX TABLES (
        v4 LABEL l1 PROPERTIES (a, b, c)
           LABEL l2 PROPERTIES (a)
    );
ALTER PROPERTY GRAPH g5 ALTER VERTEX TABLE v4 DROP LABEL l1;
SELECT pgpname FROM pg_propgraph_property
    WHERE pgppgid = 'g5'::regclass ORDER BY pgpname;
```

--
regards,
Man Zeng

Commits

  1. Fix properties orphaned by dropping a label