apache / age

Graph database optimized for fast analysis and real-time data processing. It is provided as an extension to PostgreSQL.
https://age.apache.org
Apache License 2.0
2.84k stars 400 forks source link

Convert vertex:: or edge:: into text or jsonb types #1944

Open petrarca opened 3 days ago

petrarca commented 3 days ago

Hello, there seems no way to convert a ::vertex or ::edge to a jsonb or ::text. There is a function agetype_to_text which works only on scalar-values but not on that data types.

SELECT agtype_to_text(p) FROM cypher('graph1', $$
match (p) return p
$$) as (p agtype)

-- does not work

SELECT p::jsonb FROM cypher('graph1', $$
match (p) return p
$$) as (p agtype)

-- does neither work

Any ideas to extract at least the properties for ::vertex or ::edge from SQL?

jrgemignani commented 3 days ago

@petrarca Here is a way -

psql-16.2-5432-psql=# SELECT * FROM cypher('test', $$ match (p) return ag_catalog.agtype_out(p) $$) as (p text);
                                      p
------------------------------------------------------------------------------
 {"id": 281474976710657, "label": "", "properties": {"name": "John"}}::vertex
(1 row)

psql-16.2-5432-psql=# SELECT pg_typeof(p) FROM cypher('test', $$ match (p) return ag_catalog.agtype_out(p) $$) as (p text);
 pg_typeof
-----------
 text
(1 row)

psql-16.2-5432-psql=#
psql-16.2-5432-psql=# SELECT * FROM cypher('test', $$ match (p) return ag_catalog.agtype_out(properties(p)) $$) as (p text);                p
------------------
 {"name": "John"}
(1 row)

psql-16.2-5432-psql=# SELECT pg_typeof(p) FROM cypher('test', $$ match (p) return ag_catalog.agtype_out(properties(p)) $$) as (p text);
 pg_typeof
-----------
 text
(1 row)

psql-16.2-5432-psql=#
petrarca commented 22 hours ago

Great. That works. Thank you very much!

jrgemignani commented 18 hours ago

@petrarca Yw. If this resolves your issue, please consider closing the ticket :)