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 error logs:
```
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 question is 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

Reply via email to