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

Reply via email to