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

From: Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>
To: zengman <zengman(at)halodbtech(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org>
Subject: Re: (SQL/PGQ) Clean up orphaned properties when dropping a label
Date: 2026-06-11 03:55:13
Message-ID: CAExHW5scCjsrkDz4cfVaxyGRFJsgeeuwxFrqfvuVYbE0Pq2tcA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jun 5, 2026 at 7:59 PM zengman <zengman(at)halodbtech(dot)com> wrote:
>
> 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(at)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(at)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;
> ```

Thanks for the report and the patch. The fix is on the right track. I
changed a few things as follows
a. we usually add operands to the same operator at the end, not at the
beginning.
b. create_property_graph.sql, which tests all property graph DDLs, is
the right place to add these tests. graph_table.sql tests graph query.

I have used an existing property graph in create_property_graph.sql in
the test. It removes a label from the property graph which has two
properties associated with it, one that gets orphaned and one that
doesn't. We can verify that the orphaned property gets dropped from
the property graph but not the other one by information schema query
outputs later. So didn't add any separate verification step after the
DDL.

Attached patch with those changes.

--
Best Wishes,
Ashutosh Bapat

Attachment Content-Type Size
v20260611-0010-Properties-orphaned-by-dropping-a-label.patch text/x-patch 16.1 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Dilip Kumar 2026-06-11 04:12:32 Re: Proposal: Conflict log history table for Logical Replication
Previous Message Chao Li 2026-06-11 03:31:26 pg_restore handles extended statistics inconsistently with statistics data