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

From Vladlen Popolitov
Subject Re: SQL Property Graph Queries (SQL/PGQ)
Date
Msg-id 599a92f04dfb7c00631e0dd097405564@postgrespro.ru
Whole thread Raw
In response to Re: SQL Property Graph Queries (SQL/PGQ)  (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>)
List pgsql-hackers
Ashutosh Bapat писал(а) 2025-02-25 17:20:
> On Tue, Feb 25, 2025 at 3:17 PM Vladlen Popolitov
> <v.popolitov@postgrespro.ru> wrote:
>> 
>> Hi!
>> 
>>   I would ask about CREATE GRAPH PROPERTY. From my point of view it 
>> makes
>> very strong
>> check of types including check of typmod.
>> 
>>   Example:
>> 
>> CREATE TABLE userslist (
>>    user_id INT primary key,
>>    name   VARCHAR(40)
>> );
>> 
>> CREATE TABLE groupslist (
>>    group_id INT primary key,
>>    name   VARCHAR(30)
>> );
>> 
>> CREATE TABLE memberslist (
>>   member_id INT primary key,
>>   user_id INT,
>>   group_id INT,
>>   CONSTRAINT members_users_fk1 FOREIGN KEY (user_id) REFERENCES 
>> userslist
>> (user_id),
>>   CONSTRAINT members_groups_fk1 FOREIGN KEY (group_id) REFERENCES
>> groupslist (group_id)
>> );
>> 
>> CREATE PROPERTY GRAPH members_pg
>>    VERTEX TABLES (
>>      userslist
>>        KEY (user_id)
>>        LABEL luser
>>        PROPERTIES ALL COLUMNS,
>>      groupslist
>>        KEY (group_id)
>>        LABEL lgroup
>>        PROPERTIES ALL COLUMNS
>>   )
>>    edge TABLES (
>>      memberslist
>>        KEY (member_id)
>>        SOURCE KEY (user_id) REFERENCES userslist (user_id)
>>        DESTINATION KEY (group_id) REFERENCES groupslist (group_id)
>>        LABEL lmember
>>        PROPERTIES ALL COLUMNS
>>   );
>> 
>> Last command fails with error:
>> ERROR:  property "name" data type modifier mismatch: 19 vs. 14
>> DETAIL:  In a property graph, a property of the same name has to have
>> the same type modifier in each label.
>> 
>> Labels luser and lgroup both have property "name" originated from 
>> tables
>> userslist and groupslist
>> with types VARCHAR(40) and VARCHAR(30). Current implementation treats
>> them as fields with
>> different types. I think, they should not be treated as different 
>> types.
>> Typmod is additional
>> constrain, it does not create another type.
>> Documentation includes:"modifiers, that is optional constraints 
>> attached
>> to a type declaration,
>> such as char(5) or numeric(30,2)"
>> 
>> Operations with values using different typmod do not require cast, 
>> they
>> treated as the
>> same type.
> 
> When a property is projected in a COLUMNS clause, it will be added to
> the SELECT list of the rewritten query, which in turn could be a UNION
> query. Having the same typmod for all the properties with the same
> name makes it easy to write the SELECT list of UNION. Otherwise, we
> have to find a common typmod for all the properties. This restriction
> is not expected to be permanent but makes the first set of patches
> easy, which are quite large as is. I think in some next version, we
> will lift this restriction as well as lift the restriction on all
> properties with the same name needing the same datatype. According to
> the SQL standard, they can be of different data types as long as
> there's a common type to which they all can be cast to. It may be
> possible to lift this restriction in this version itself, if we find
> enough developer and reviewer bandwidth.
Hi!

  Thank you for explanation. I expected, that it has some internal
dependency, but did not find it.
I am running graph queries now, and I will see how they interact with
typmod.

-- 
Best regards,

Vladlen Popolitov.



pgsql-hackers by date:

Previous
From: "Hayato Kuroda (Fujitsu)"
Date:
Subject: RE: Adding a '--clean-publisher-objects' option to 'pg_createsubscriber' utility.
Next
From: Ilia Evdokimov
Date:
Subject: Re: describe special values in GUC descriptions more consistently