Skip to content

CREATE operations are silently discarded in a multi-part write-and-read query #2491

Description

@zihaozeng0021

Describe the bug

A dense set of relationships created earlier in the same Cypher query is not matched by a subsequent two-hop relationship pattern.

The query creates eight nodes and directed relationships between every pair of distinct nodes. Every node should therefore match as the middle node in:

(:N)-[:R]->(middle:N)<-[:R]-(:N)

However, the query returns "FAIL", indicating that no middle nodes were found.

How are you accessing AGE (Command line, driver, etc.)?

  • Command line using interactive psql
  • Executed through docker exec
docker exec -it test psql -U postgres -d postgres

What data setup do we need to do?

Start Apache AGE:

docker run --rm --name test -e POSTGRES_PASSWORD=agepass -p 5432:5432 apache/age:latest

Connect using interactive psql:

docker exec -it test psql -U postgres -d postgres

Load AGE, configure the search path, and create the graph:

LOAD 'age';
SET search_path = ag_catalog, public;
SELECT create_graph('test');

No separate graph data setup is required because the affected query creates the nodes and relationships itself.

What is the necessary configuration info needed?

  • Docker image: apache/age:latest
  • PostgreSQL: 18.1
  • Apache AGE: 1.7.0
  • AGE extension installed by the Docker image
  • search_path set to ag_catalog, public
  • Operating system: WSL2, Ubuntu 24.04.1 LTS
  • Installation method: Docker

What is the command that caused the error?

SELECT *
FROM cypher('test', $cypher$
  UNWIND range(1,8) AS i
  CREATE (:N {id:i})
  WITH count(*) AS ignored
  MATCH (a:N), (b:N)
  WHERE a.id <> b.id
  CREATE (a)-[:R]->(b)
  WITH count(*) AS ignored
  MATCH (:N)-[:R]->(middle:N)<-[:R]-(:N)
  WITH collect(middle) AS values
  RETURN CASE
    WHEN size(values) > 0 THEN 'PASS'
    ELSE 'FAIL'
  END AS value
$cypher$) AS (value agtype);

Actual result:

 value
--------
 "FAIL"
(1 row)

Expected behavior

The query creates eight nodes and 56 directed relationships.

Every node has multiple incoming relationships, so the middle-node pattern should produce rows and the query should return:

 value
--------
 "PASS"
(1 row)

Environment (please complete the following information):

  • Apache AGE version: 1.7.0
  • PostgreSQL version: 18.1
  • Docker image: apache/age:latest
  • Operating system: WSL2, Ubuntu 24.04.1 LTS
  • Access method: interactive psql through docker exec

Additional context

The behavior was reproduced twice in clean Docker containers. The query completed without a PostgreSQL error, and the database remained available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions