liuyhs opened a new issue, #1347: URL: https://github.com/apache/age/issues/1347
**Describe the bug** When I tested using age, there were no issues with small data volumes, but once the volume reached a certain point, an error would be reported when executing select. **How are you accessing AGE (Command line, driver, etc.)?** -- psql **What data setup do we need to do?** -- pgsql ... CREATE EXTENSION IF NOT EXISTS age; SET search_path = ag_catalog, "$user", public; SELECT * FROM ag_catalog.create_graph('cmdb_graph'); CREATE INDEX age_edge_all_gin_idx ON cmdb_graph."_ag_label_edge" USING GIN (properties); SELECT ag_catalog.create_elabel('cmdb_graph', 'Contain'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX age_edge_contain_gin_idx ON cmdb_graph."Contain" USING GIN (properties); CREATE UNIQUE INDEX idx_age_edge_contain_unique_index ON cmdb_graph."Contain"(ag_catalog.agtype_access_operator(properties, '"lid"'::agtype), ag_catalog.agtype_access_operator(properties, '"rid"'::agtype)); SELECT ag_catalog.create_elabel('cmdb_graph', 'Deploy'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX age_edge_deploy_gin_idx ON cmdb_graph."Deploy" USING GIN (properties); CREATE UNIQUE INDEX idx_age_edge_deploy_unique_index ON cmdb_graph."Deploy"(ag_catalog.agtype_access_operator(properties, '"lid"'::agtype), ag_catalog.agtype_access_operator(properties, '"rid"'::agtype)); SELECT ag_catalog.create_vlabel('cmdb_graph', 'CVM'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_cvm_properties ON cmdb_graph."CVM" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_cvm_id ON cmdb_graph."CVM"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 1..10000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: CVM { `id`: "%s", name: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i, (SELECT uuid_in(md5(random()::text || now()::text)::cstring)) ); END LOOP; END $do$; select count(1) from cmdb_graph."CVM" ; explain analyze select any_profile from ag_catalog.cypher('cmdb_graph',$$ MATCH (any_profile:`CVM` { id: '9090' }) RETURN any_profile $$ ) as (any_profile ag_catalog.agtype); SELECT ag_catalog.create_vlabel('cmdb_graph', 'CAS_Pool'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_caspool_properties ON cmdb_graph."CAS_Pool" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_caspool_id ON cmdb_graph."CAS_Pool"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 10001..30000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: CAS_Pool { `id`: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i ); END LOOP; END $do$; select count(1) from cmdb_graph."CAS_Pool" ; explain analyze select any_profile from ag_catalog.cypher('cmdb_graph',$$ MATCH (any_profile:`CAS_Pool` { id: '1' }) RETURN any_profile $$ ) as (any_profile ag_catalog.agtype); ------ generate relation ------- DO $do$ BEGIN FOR i IN 1..10000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CVM {id: "%s"}), (r:CAS_Pool {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+10000,i,i,i+10000, i%100 ); EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CVM {id: "%s"}), (r:CAS_Pool {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+20000,i+10000,i,i+20000, i%100 ); END LOOP; END $do$; select count(1) from cmdb_graph."Contain" ; --查询一跳关系 explain (analyze) SELECT * FROM cypher('cmdb_graph', $$ MATCH p = (:CVM {id: '10'})-[]->(a) RETURN relationships(p) $$) as (r agtype); SELECT ag_catalog.create_vlabel('cmdb_graph', 'CAS_Cluster'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_cascluster_properties ON cmdb_graph."CAS_Cluster" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_cascluster_id ON cmdb_graph."CAS_Cluster"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 30001..70000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: CAS_Cluster { `id`: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i ); END LOOP; END $do$; select count(1) from cmdb_graph."CAS_Cluster" ; ------ generate relation ------- DO $do$ BEGIN FOR i IN 10001..30000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Pool {id: "%s"}), (r:CAS_Cluster {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+20000,i+20000,i,i+20000, i%100 ); EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Pool {id: "%s"}), (r:CAS_Cluster {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+40000,i+40000,i,i+40000, i%100 ); END LOOP; END $do$; select count(1) from cmdb_graph."Contain" ; --查询一跳关系 explain (analyze) SELECT * FROM cypher('cmdb_graph', $$ MATCH p = (:CVM {id: '10'})-[]->(a)-[]->(b) RETURN relationships(p) $$) as (r agtype); SELECT ag_catalog.create_vlabel('cmdb_graph', 'CAS_Host'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_cashost_properties ON cmdb_graph."CAS_Host" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_cashost_id ON cmdb_graph."CAS_Host"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 70001..150000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: CAS_Host { `id`: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i ); END LOOP; END $do$; select count(1) from cmdb_graph."CAS_Host" ; ------ generate relation ------- create or replace procedure "ag_catalog"."createRelation"() as $do$ declare i integer := 1; BEGIN FOR i IN 30001..70000 loop EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Cluster {id: "%s"}), (r:CAS_Host {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+40000,i+40000,i,i+40000, i%100 ); EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Cluster {id: "%s"}), (r:CAS_Host {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+80000,i+80000,i,i+80000, i%100 ); commit; END LOOP; return; end $do$ language plpgsql; call "ag_catalog"."createRelation"() ; SELECT ag_catalog.create_vlabel('cmdb_graph', 'CAS_VM'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_casvm_properties ON cmdb_graph."CAS_VM" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_casvm_id ON cmdb_graph."CAS_VM"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 150001..310000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: CAS_VM { `id`: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i ); END LOOP; END $do$; select count(1) from cmdb_graph."CAS_VM" ; create or replace procedure "ag_catalog"."createRelation"() as $do$ declare i integer := 1; BEGIN FOR i IN 70001..150000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Host {id: "%s"}), (r:CAS_VM {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+80000,i+80000,i,i+80000, i%100 ); EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CAS_Host {id: "%s"}), (r:CAS_VM {id: "%s"}) CREATE (d)-[:Contain {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i+160000,i+160000,i,i+160000, i%100 ); commit; END LOOP; return; end $do$ language plpgsql; call "ag_catalog"."createRelation"() ; SELECT ag_catalog.create_vlabel('cmdb_graph', 'Server'); SELECT * FROM ag_catalog.ag_label; CREATE INDEX gin_idx_server_properties ON cmdb_graph."Server" USING GIN (properties); CREATE UNIQUE INDEX unique_idx_server_id ON cmdb_graph."Server"(ag_catalog.agtype_access_operator(properties, '"id"'::agtype)); ------ generate more data ------- DO $do$ BEGIN FOR i IN 1000001..1010000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ CREATE (any_vertex: Server { `id`: "%s", name: "%s"} ) RETURN any_vertex $$ ) as (any_vertex ag_catalog.agtype)', i, (SELECT uuid_in(md5(random()::text || now()::text)::cstring)) ); END LOOP; END $do$; ------ generate relation ------- DO $do$ BEGIN FOR i IN 1000001..1010000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:Server {id: "%s"}), (r:CVM {id: "%s"}) CREATE (d)-[:Deploy {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i,i-1000000,i,i,i-1000000, i%100 ); END LOOP; END $do$; DO $do$ BEGIN FOR i IN 1000001..1010000 LOOP EXECUTE format(' select * from ag_catalog.cypher(''cmdb_graph'', $$ MATCH (d:CVM {id: "%s"}), (r:Server {id: "%s"}) CREATE (d)-[:Deploy {id: "%s", lid: "%s", rid: "%s", displayName: "连接", isAutoGenerate: "1", ruleId: "%s"}]->(r) $$ ) as (any_vertex ag_catalog.agtype)', i-1000000,i,i+10000,i-1000000,i,i%100 ); END LOOP; END $do$; select count(1) from cmdb_graph."Deploy" ; ... ``` **What is the necessary configuration info needed?** - [e.g. Installed PostGIS] - Installed AGE **What is the command that caused the error?** ```pgsql SELECT * FROM cypher('cmdb_graph', $$ MATCH p = (:CVM {id: '10'})-[*2]-() unwind nodes(p) as n with p, size(collect(distinct n)) as testLength where testLength = LENGTH(p) + 1 RETURN relationships(p) $$) as (r agtype); ``` ``` ERROR: unknow type of agtype container 0 ``` **Expected behavior** It is necessary to reach a certain amount of data before an error occurs. **Environment (please complete the following information):** - Version: [e.g. 0.4.0] - Version: 1.4.0 - PG Version: PG14 **Additional context** https://www.postgresql.org/message-id/534fca83789c4a378c7de379e9067d4f%40politie.nl I also found a similar bug on the PostgreSQL official website, which appeared in version 13.2.1. After testing, they have resolved this issue in version 14.5. The link is above. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@age.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org