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

From zengman
Subject Re: SQL Property Graph Queries (SQL/PGQ)
Date
Msg-id tencent_0F596C3C557454CE7EC420B4@qq.com
Whole thread Raw
In response to Re: SQL Property Graph Queries (SQL/PGQ)  (Peter Eisentraut <peter@eisentraut.org>)
Responses Re: SQL Property Graph Queries (SQL/PGQ)
List pgsql-hackers
Hi all,

I hit a Segmentation fault due to what might be an non-standard coding approach I used. Here are the test details and
errorlogs:
 
```
postgres@zxm-VMware-Virtual-Platform:~/code/postgres$ psql
psql (19devel)
Type "help" for help.

postgres=# CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

CREATE TABLE follows (
  id INT PRIMARY KEY,
  follower INT REFERENCES users(id),
  following INT REFERENCES users(id)
);

INSERT INTO users VALUES
  (1, 'A'), (2, 'B'), (3, 'C'), (4, 'D');

INSERT INTO follows VALUES
  (1, 1, 2),
  (2, 1, 3),
  (3, 2, 3),
  (4, 2, 4),
  (5, 3, 4);

CREATE PROPERTY GRAPH social_graph
  VERTEX TABLES (users)
  EDGE TABLES (
      follows
          SOURCE KEY (follower) REFERENCES users(id)
          DESTINATION KEY (following) REFERENCES users(id)
  );

-- ok
SELECT *
FROM GRAPH_TABLE (
  social_graph
  MATCH (a IS users)-[]->(x IS users)<-[]-(b IS users)
  WHERE b.name != a.name
  COLUMNS (a.name AS usera, x.name AS common_name, b.name AS userb)
);

-- error
SELECT *
FROM GRAPH_TABLE (
  social_graph
  MATCH (a IS users)-[]->(x IS users)<-[]-(b IS users WHERE b.name != a.name)
  COLUMNS (a.name AS usera, x.name AS common_name, b.name AS userb)
);
CREATE TABLE
CREATE TABLE
INSERT 0 4
INSERT 0 5
CREATE PROPERTY GRAPH
 usera | common_name | userb 
-------+-------------+-------
 A     | C           | B
 B     | C           | A
 B     | D           | C
 C     | D           | B
(4 rows)

server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: 2026-03-18 14:09:29.522 CST [103556] LOG:  client backend (PID
103851)was terminated by signal 11: Segmentation fault
 
2026-03-18 14:09:29.522 CST [103556] DETAIL:  Failed process was running: SELECT *
        FROM GRAPH_TABLE (
          social_graph
          MATCH (a IS users)-[]->(x IS users)<-[]-(b IS users WHERE b.name != a.name)
          COLUMNS (a.name AS usera, x.name AS common_name, b.name AS userb)
        );
2026-03-18 14:09:29.522 CST [103556] LOG:  terminating any other active server processes
Failed.
The connection to the server was lost. Attempting reset: Failed.
2026-03-18 14:09:29.524 CST [103556] LOG:  all server processes terminated; reinitializing
!?> 2026-03-18 14:09:29.546 CST [103857] LOG:  database system was interrupted; last known up at 2026-03-18 14:08:06
CST
2026-03-18 14:09:29.570 CST [103857] LOG:  database system was not properly shut down; automatic recovery in progress
2026-03-18 14:09:29.572 CST [103857] LOG:  redo starts at 0/02487AE8
2026-03-18 14:09:29.578 CST [103857] LOG:  invalid record length at 0/024E0AB0: expected at least 24, got 0
2026-03-18 14:09:29.578 CST [103857] LOG:  redo done at 0/024E07A8 system usage: CPU: user: 0.00 s, system: 0.00 s,
elapsed:0.00 s
 
2026-03-18 14:09:29.596 CST [103556] LOG:  database system is ready to accept connections
```

I checked the code and found that `found_mapping` was a null pointer because I didn’t enable assertions. The code in
questionis in `src/backend/rewrite/rewriteGraphTable.c`:
 

```
        /*
         * transformGraphTablePropertyRef() would not create a
         * GraphPropertyRef for a variable which is not present in the graph
         * path pattern.
         */
        Assert(found_mapping);

        mapping_factor = found_mapping->path_factor;
```

Should we remove this assertion and throw an error message instead to handle this case?

--
regards,
Man Zeng

pgsql-hackers by date:

Previous
From: Masahiko Sawada
Date:
Subject: Re: Skipping schema changes in publication
Next
From: Fujii Masao
Date:
Subject: Re: Release postmaster working memory context in slotsync worker