age icon indicating copy to clipboard operation
age copied to clipboard

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

Open petrarca opened this issue 1 year ago • 1 comments

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?

petrarca avatar Jul 02 '24 13:07 petrarca

@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=#

jrgemignani avatar Jul 02 '24 22:07 jrgemignani

Great. That works. Thank you very much!

petrarca avatar Jul 05 '24 11:07 petrarca

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

jrgemignani avatar Jul 05 '24 15:07 jrgemignani