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

Attachment: 0001-Clean-up-orphaned-properties-when-dropping-a-label.patch
Description: Binary data

Reply via email to