Re: SQL Property Graph Queries (SQL/PGQ) - Mailing list pgsql-hackers

From Ashutosh Bapat
Subject Re: SQL Property Graph Queries (SQL/PGQ)
Date
Msg-id CAExHW5suNPNFcphpabGmJnmF6EmQ2=oJ+KLWAE+o6WWScaSuDQ@mail.gmail.com
Whole thread Raw
In response to Re: SQL Property Graph Queries (SQL/PGQ)  (Junwang Zhao <zhjwpku@gmail.com>)
List pgsql-hackers
Hi Junwang,

On Sun, Aug 31, 2025 at 4:35 PM Junwang Zhao <zhjwpku@gmail.com> wrote:
>
>
> I have some review comments, and hope some of them are helpful.
>
> 1.
>
> doc/src/sgml/ddl.sgml
>
> +<programlisting>
> +CREATE PROPERTY GRAPH myshop
> +    VERTEX TABLES (
> +        products LABEL product,
> +        customers LABEL customer,
> +        orders LABEL order
> +    )
> +    EDGE TABLES (
> +        order_items SOURCE orders DESTINATION products LABEL contains,
> +        customer_orders SOURCE customers DESTINATION orders LABEL has
> +    );
> +</programlisting>
>
> order is a reserved keyword, so the following example will fail, we
> should not give a wrong example in our document.
>

I tried those examples and they all worked. What error are you
getting? What is not working for you?

> 2.
>
> doc/src/sgml/information_schema.sgml
>
> +  <title><literal>pg_element_table_key_columns</literal></title>
> +
> +  <para>
> +   The view <literal>pg_element_key_columns</literal> identifies which columns
> +   are part of the keys of the element tables of property graphs defined in
> +   the current database.  Only those property graphs are shown that the
> +   current user has access to (by way of being the owner or having some
> +   privilege).
> +  </para>
>
>
> +  <title><literal>pg_element_table_properties</literal></title>
> +
> +  <para>
> +   The view <literal>pg_element_table_labels</literal> shows the definitions
> +   of the properties for the element tables of property graphs defined in the
> +   current database.  Only those property graphs are shown that the current
> +   user has access to (by way of being the owner or having some privilege).
> +  </para>
>
> the <title> and the <para> doesn't match.

Don't understand this. What isn't matching here. May be provide a
patch with what you think is correct.

>
> 3.
>
> doc/src/sgml/queries.sgml
>
> +   <para>
> +    A path pattern thus matches a sequence of vertices and edges.  The
> +    simplest possible path pattern is
> +<programlisting>
> +()
> +</programlisting>
> +    which matches a single vertex.  The next simplest pattern would be
> +<programlisting>
> +()-[]->()
> +</programlisting>
> +    which matches a vertex followed by an edge followed by a vertex.  The
> +    characters <literal>()</literal> are a vertex pattern and the characters
> +    <literal>-[]-></literal> are an edge pattern.
> +   </para>
>
> the description seems wrong, when a user writes (), it should match
> all vertices in a property graph, for example:

This description is a continuation of the previous sentence. It should
be read as "() which matches a single vertex (in a sequence of
vertices and edges)."  See how the next sentence is written. This
looks ok to me.

>
> 4.
>
> doc/src/sgml/ref/create_property_graph.sgml
>
> +<programlisting>
> +CREATE PROPERTY GRAPH g1
> +    VERTEX TABLES (
> +        v1 LABEL foo PROPERTIES (x AS a * 2) LABEL bar PROPERTIES (x AS a * 2)
> +    ) ...
> +</programlisting>
> +      but this would not:
> +<programlisting>
> +CREATE PROPERTY GRAPH g1
> +    VERTEX TABLES (
> +        v1 LABEL foo PROPERTIES (x AS a * 2) LABEL bar PROPERTIES (x AS a * 10)
> +    ) ...
> +</programlisting></para>
>
> The expr after  PROPERTIES should be (a * 2 AS x)

Good catch. Fixed.

>
> 5.
>
> src/backend/catalog/sql_features.txt
>
> +G034 Path concatenation YES SQL/PGQ required
>
> Do we support path concatenation?

I don't think so. But let Peter confirm it.

>
> +G070 Label expression: label disjunction NO SQL/PGQ required
>
> I think this should be a YES?

Nice catch. Fixed.

>
> 6.
>
> src/backend/commands/tablecmds.c
>
> The description RenameRelation and RemoveRelations should adapt
> property graph, below are diffs I suggest:
>
>  /*
> - * Execute ALTER TABLE/INDEX/SEQUENCE/VIEW/MATERIALIZED VIEW/FOREIGN TABLE
> + * Execute ALTER TABLE/INDEX/SEQUENCE/VIEW/MATERIALIZED VIEW/FOREIGN
> TABLE/PROPERTY GRAPH
>   * RENAME
>   */
>  ObjectAddress
> @@ -4210,8 +4210,8 @@ RenameRelation(RenameStmt *stmt)
>
>         /*
>          * Grab an exclusive lock on the target table, index, sequence, view,
> -        * materialized view, or foreign table, which we will NOT release until
> -        * end of transaction.
> +        * materialized view, foreign table or property graph, which we will NOT
> +        * release until end of transaction.
>
>
>  /*
>   * RemoveRelations
>   *             Implements DROP TABLE, DROP INDEX, DROP SEQUENCE, DROP VIEW,
> - *             DROP MATERIALIZED VIEW, DROP FOREIGN TABLE
> + *             DROP MATERIALIZED VIEW, DROP FOREIGN TABLE, DROP PROPERTY GRAPH
>

Nice catch. Fixed.

> 7.
>
> src/backend/nodes/nodeFuncs.c
>
> exprLocation should have an arm for T_GraphPropertyRef? I suggest:
>
> @@ -1811,6 +1811,9 @@ exprLocation(const Node *expr)
>                 case T_PartitionRangeDatum:
>                         loc = ((const PartitionRangeDatum *) expr)->location;
>                         break;
> +               case T_GraphPropertyRef:
> +                       loc = ((const GraphPropertyRef *) expr)->location;
> +                       break;
>
> 8.
>
> src/backend/rewrite/rewriteGraphTable.c
>
> patch 0002
>
> + /*
> + * Label expressions from two element patterns need to be
> + * conjucted. Label conjuction is not supported right now
>
> typo, should be conjuncted and conjunction.

Done and improved that comment a bit.

Attaching the patchset with the next email.

--
Best Wishes,
Ashutosh Bapat



pgsql-hackers by date:

Previous
From: Aleksander Alekseev
Date:
Subject: Re: Metadata and record block access stats for indexes
Next
From: Aleksander Alekseev
Date:
Subject: Re: Remove useless casts to (void *)