postgresqlpostgresql-12apache-age

Function cypher(unknown, unknown) does not exist in Apache AGE


I am trying to execute a Cypher query on my Apache AGE graph database using the cypher function in PostgreSQL, but I am encountering an error.

Here is the query I am trying to run:

SELECT * FROM cypher('g1', $$ MATCH (n) return n $$);

And here is the error message that I am getting:

ERROR:  function cypher(unknown, unknown) does not exist
LINE 1: SELECT * FROM cypher('g1', $$ MATCH (n) return n $$);
                      ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

I have already checked that I have installed the Apache AGE extension and added it to my database, and I am using the correct graph name (g1) in the query.

I double-checked and confirmed that the AGE extension is installed by running this query.

SELECT * FROM pg_extension WHERE extname = 'age';

How can I resolve this error and successfully execute my Cypher query in Apache AGE?


Solution

  • Firstly there is an error in your query, the correct query is

    SELECT * FROM cypher('<enter_graph_name_here>', $$ MATCH (n) return n $$)
    AS (result agtype);
    

    The above command will only execute correctly if you have set the search_path as

    SET search_path to ag_catalog;
    

    If you do not set the search_path as above and it is public be default, then modify the first query as

    SELECT * FROM ag_catalog.cypher('<enter_graph_name_here>', $$ MATCH (n) return n $$)
    AS (result agtype);
    

    This is because cypher function is present in ag_catalog namespace and you need to either set the namespace to ag_catalog using search_path or prefix all the function names with ag_catalog. in all the queries.