PostgreSQL Oracle 兼容性之 - connect by 高级选项 CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH、CONNECT_BY_ISCYCLE、LEVEL

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介:

标签

PostgreSQL , CTE , 递归查询 , cycle , depth , loop , deep , level , 层级 , array , row array


背景

Oracle connect by语法支持异构查询,其中包含了一些特殊的变量:CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH、CONNECT_BY_ISCYCLE、LEVEL。

https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm#i2053935

https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

PostgreSQL通过CTE语法同样可以实现异构查询,同样能支持:

1、层级

2、路径

3、规避循环

4、限制每个层级返回的条数

CTE 例子

https://www.postgresql.org/docs/10/static/queries-with.html

《PostgreSQL 图式搜索(graph search)实践 - 百亿级图谱,毫秒响应》

1、层级,路径,规避循环的例子:

背景,图式搜索是PostgreSQL在(包括流计算、全文检索、图式搜索、K-V存储、图像搜索、指纹搜索、空间数据、时序数据、推荐等)诸多特性中的一个。

采用CTE语法,可以很方便的实现图式搜索(N度搜索、最短路径、点、边属性等)。

其中图式搜索中的:层级深度,是否循环,路径,都是可表述的。

pic

pic

表结构,

create table a(    
  c1 int,                -- 点1    
  c2 int,                -- 点2    
  prop jsonb,            -- 点1,2对应的边的属性,使用JSON存储    
  primary key (c1,c2)    -- 主键    
);    

CTE SQL及解释如下:

WITH RECURSIVE search_graph(    
  c1,     -- 点1    
  c2,     -- 点2    
  prop,   -- 边的属性    
  depth,  -- 深度,从1开始    
  path,   -- 路径,数组存储    
  cycle   -- 是否循环    
) AS (    
        select c1,c2,prop,depth,path,cycle from (    
        SELECT      -- ROOT节点查询    
          g.c1,     -- 点1    
          g.c2,     -- 点2    
          g.prop,   -- 边的属性    
          1 depth,            -- 初始深度=1    
          ARRAY[g.c1] path,   -- 初始路径    
          false  as cycle     -- 是否循环(初始为否)    
        FROM a AS g     
        WHERE     
          c1 = ?                           -- ROOT节点=?    
          -- AND prop->>weight >= ?        -- 相关性权重    
          -- ORDER BY prop->>weight desc   -- 可以使用ORDER BY,例如返回权重排在前面的N条。    
          limit ?                          -- 每个层级限制多少条?    
        ) t    
      UNION ALL    
        select c1,c2,prop,depth,path,cycle from (    
        SELECT               -- 递归子句     
          g.c1,              -- 点1    
          g.c2,              -- 点2    
          g.prop,            -- 边的属性    
          sg.depth + 1 depth,    -- 深度+1    
          path || g.c1 path,     -- 路径中加入新的点    
          (g.c1 = ANY(path)) as cycle     -- 是否循环,判断新点是否已经在之前的路径中    
        FROM a AS g, search_graph AS sg   -- 循环 INNER JOIN    
        WHERE     
          g.c1 = sg.c2         -- 递归JOIN条件    
          AND NOT cycle        -- 防止循环    
          AND sg.depth <= ?    -- 搜索深度=?      
          -- AND prop->>weight >= ?        -- 相关性权重    
          -- ORDER BY prop->>weight desc   -- 可以使用ORDER BY,例如返回权重排在前面的N条。    
          limit ?                          -- 每个层级限制多少条?               
        ) t    
)    
SELECT * FROM search_graph;       -- 查询递归表,可以加LIMIT输出,也可以使用游标    

查询举例:

3级递归,每级限制输出100条,输出层级,路径等。

   c1    |    c2    | prop | depth |          path          | cycle     
---------+----------+------+-------+------------------------+-------    
   31208 |   300008 |      |     1 | {31208}                | f    
   31208 |   300040 |      |     1 | {31208}                | f    
   31208 |   300046 |      |     1 | {31208}                | f    
   31208 |   300050 |      |     1 | {31208}                | f    
   31208 |   300061 |      |     1 | {31208}                | f    
   31208 |   300082 |      |     1 | {31208}                | f    
   31208 |   300093 |      |     1 | {31208}                | f    
   31208 |   300116 |      |     1 | {31208}                | f    
   31208 |   300135 |      |     1 | {31208}                | f    
   31208 |   300201 |      |     1 | {31208}                | f    
   31208 |   300215 |      |     1 | {31208}                | f    
   31208 |   300218 |      |     1 | {31208}                | f    
   31208 |   300304 |      |     1 | {31208}                | f    
   31208 |   300333 |      |     1 | {31208}                | f    
   31208 |   300352 |      |     1 | {31208}                | f    
   31208 |   300375 |      |     1 | {31208}                | f    
   31208 |   300390 |      |     1 | {31208}                | f    
   31208 |   300423 |      |     1 | {31208}                | f    
   31208 |   300457 |      |     1 | {31208}                | f    
   31208 |   300531 |      |     1 | {31208}                | f    
   31208 |   300560 |      |     1 | {31208}                | f    
   31208 |   300565 |      |     1 | {31208}                | f    
   31208 |   300596 |      |     1 | {31208}                | f    
   31208 |   300691 |      |     1 | {31208}                | f    
   31208 |   300722 |      |     1 | {31208}                | f    
   31208 |   300739 |      |     1 | {31208}                | f    
   31208 |   300774 |      |     1 | {31208}                | f    
   31208 |   300798 |      |     1 | {31208}                | f    
   31208 |   300806 |      |     1 | {31208}                | f    
   31208 |   300814 |      |     1 | {31208}                | f    
   31208 |   300860 |      |     1 | {31208}                | f    
   31208 |   300880 |      |     1 | {31208}                | f    
   31208 |   300902 |      |     1 | {31208}                | f    
   31208 |   300958 |      |     1 | {31208}                | f    
   31208 |   301003 |      |     1 | {31208}                | f    
   31208 |   301020 |      |     1 | {31208}                | f    
   31208 |   301109 |      |     1 | {31208}                | f    
   31208 |   301151 |      |     1 | {31208}                | f    
   31208 |   301155 |      |     1 | {31208}                | f    
   31208 |   301194 |      |     1 | {31208}                | f    
   31208 |   301235 |      |     1 | {31208}                | f    
   31208 |   301255 |      |     1 | {31208}                | f    
   31208 |   301264 |      |     1 | {31208}                | f    
   31208 |   301270 |      |     1 | {31208}                | f    
   31208 |   301276 |      |     1 | {31208}                | f    
   31208 |   301283 |      |     1 | {31208}                | f    
   31208 |   301303 |      |     1 | {31208}                | f    
   31208 |   301306 |      |     1 | {31208}                | f    
   31208 |   301367 |      |     1 | {31208}                | f    
   31208 |   301405 |      |     1 | {31208}                | f    
   31208 |   301446 |      |     1 | {31208}                | f    
   31208 |   301474 |      |     1 | {31208}                | f    
   31208 |   301529 |      |     1 | {31208}                | f    
   31208 |   301534 |      |     1 | {31208}                | f    
   31208 |   301575 |      |     1 | {31208}                | f    
   31208 |   301592 |      |     1 | {31208}                | f    
   31208 |   301609 |      |     1 | {31208}                | f    
   31208 |   301640 |      |     1 | {31208}                | f    
   31208 |   301680 |      |     1 | {31208}                | f    
   31208 |   301685 |      |     1 | {31208}                | f    
   31208 |   301686 |      |     1 | {31208}                | f    
   31208 |   301713 |      |     1 | {31208}                | f    
   31208 |   301824 |      |     1 | {31208}                | f    
   31208 |   301832 |      |     1 | {31208}                | f    
   31208 |   301852 |      |     1 | {31208}                | f    
   31208 |   301858 |      |     1 | {31208}                | f    
   31208 |   301863 |      |     1 | {31208}                | f    
   31208 |   301872 |      |     1 | {31208}                | f    
   31208 |   301882 |      |     1 | {31208}                | f    
   31208 |   301970 |      |     1 | {31208}                | f    
   31208 |   302024 |      |     1 | {31208}                | f    
   31208 |   302140 |      |     1 | {31208}                | f    
   31208 |   302150 |      |     1 | {31208}                | f    
   31208 |   302153 |      |     1 | {31208}                | f    
   31208 |   302200 |      |     1 | {31208}                | f    
   31208 |   302218 |      |     1 | {31208}                | f    
   31208 |   302276 |      |     1 | {31208}                | f    
   31208 |   302346 |      |     1 | {31208}                | f    
   31208 |   302397 |      |     1 | {31208}                | f    
   31208 |   302400 |      |     1 | {31208}                | f    
   31208 |   302474 |      |     1 | {31208}                | f    
   31208 |   302507 |      |     1 | {31208}                | f    
   31208 |   302565 |      |     1 | {31208}                | f    
   31208 |   302574 |      |     1 | {31208}                | f    
   31208 |   302589 |      |     1 | {31208}                | f    
   31208 |   302593 |      |     1 | {31208}                | f    
   31208 |   302602 |      |     1 | {31208}                | f    
   31208 |   302605 |      |     1 | {31208}                | f    
   31208 |   302660 |      |     1 | {31208}                | f    
   31208 |   302686 |      |     1 | {31208}                | f    
   31208 |   302721 |      |     1 | {31208}                | f    
   31208 |   302780 |      |     1 | {31208}                | f    
   31208 |   302806 |      |     1 | {31208}                | f    
   31208 |   302843 |      |     1 | {31208}                | f    
   31208 |   302894 |      |     1 | {31208}                | f    
   31208 |   302908 |      |     1 | {31208}                | f    
   31208 |   302961 |      |     1 | {31208}                | f    
   31208 |   302971 |      |     1 | {31208}                | f    
   31208 |   302975 |      |     1 | {31208}                | f    
   31208 |   302988 |      |     1 | {31208}                | f    
  300008 |  3001645 |      |     2 | {31208,300008}         | f    
  300008 |  3037289 |      |     2 | {31208,300008}         | f    
  300008 |  3032152 |      |     2 | {31208,300008}         | f    
  300008 |  3024717 |      |     2 | {31208,300008}         | f    
  300008 |  3014555 |      |     2 | {31208,300008}         | f    
  300008 |  3040396 |      |     2 | {31208,300008}         | f    
  300008 |  3032492 |      |     2 | {31208,300008}         | f    
  300008 |  3047950 |      |     2 | {31208,300008}         | f    
  300008 |  3031417 |      |     2 | {31208,300008}         | f    
  300008 |  3005462 |      |     2 | {31208,300008}         | f    
  300008 |  3047212 |      |     2 | {31208,300008}         | f    
  300008 |  3015890 |      |     2 | {31208,300008}         | f    
  300008 |  3004061 |      |     2 | {31208,300008}         | f    
  300008 |  3034108 |      |     2 | {31208,300008}         | f    
  300008 |  3020085 |      |     2 | {31208,300008}         | f    
  300008 |  3032992 |      |     2 | {31208,300008}         | f    
  300008 |  3000726 |      |     2 | {31208,300008}         | f    
  300008 |  3043559 |      |     2 | {31208,300008}         | f    
  300008 |  3013642 |      |     2 | {31208,300008}         | f    
  300008 |  3018378 |      |     2 | {31208,300008}         | f    
  300008 |  3010610 |      |     2 | {31208,300008}         | f    
  300008 |  3038619 |      |     2 | {31208,300008}         | f    
  300008 |  3003777 |      |     2 | {31208,300008}         | f    
  300008 |  3001058 |      |     2 | {31208,300008}         | f    
  300008 |  3020331 |      |     2 | {31208,300008}         | f    
  300008 |  3006217 |      |     2 | {31208,300008}         | f    
  300008 |  3016217 |      |     2 | {31208,300008}         | f    
  300008 |  3046372 |      |     2 | {31208,300008}         | f    
  300008 |  3032365 |      |     2 | {31208,300008}         | f    
  300008 |  3015589 |      |     2 | {31208,300008}         | f    
  300008 |  3049638 |      |     2 | {31208,300008}         | f    
  300008 |  3034010 |      |     2 | {31208,300008}         | f    
  300008 |  3002878 |      |     2 | {31208,300008}         | f    
  300008 |  3031789 |      |     2 | {31208,300008}         | f    
  300008 |  3008727 |      |     2 | {31208,300008}         | f    
  300008 |  3017432 |      |     2 | {31208,300008}         | f    
  300008 |  3022185 |      |     2 | {31208,300008}         | f    
  300008 |  3041219 |      |     2 | {31208,300008}         | f    
  300008 |  3015383 |      |     2 | {31208,300008}         | f    
  300008 |  3003602 |      |     2 | {31208,300008}         | f    
  300008 |  3046681 |      |     2 | {31208,300008}         | f    
  300008 |  3012595 |      |     2 | {31208,300008}         | f    
  300008 |  3019492 |      |     2 | {31208,300008}         | f    
  300008 |  3000742 |      |     2 | {31208,300008}         | f    
  300008 |  3046703 |      |     2 | {31208,300008}         | f    
  300008 |  3039577 |      |     2 | {31208,300008}         | f    
  300008 |  3033734 |      |     2 | {31208,300008}         | f    
  300008 |  3047429 |      |     2 | {31208,300008}         | f    
  300008 |  3033136 |      |     2 | {31208,300008}         | f    
  300008 |  3047377 |      |     2 | {31208,300008}         | f    
  300008 |  3015807 |      |     2 | {31208,300008}         | f    
  300008 |  3043746 |      |     2 | {31208,300008}         | f    
  300008 |  3035995 |      |     2 | {31208,300008}         | f    
  300008 |  3019584 |      |     2 | {31208,300008}         | f    
  300008 |  3044804 |      |     2 | {31208,300008}         | f    
  300008 |  3006327 |      |     2 | {31208,300008}         | f    
  300008 |  3025801 |      |     2 | {31208,300008}         | f    
  300008 |  3011021 |      |     2 | {31208,300008}         | f    
  300008 |  3002699 |      |     2 | {31208,300008}         | f    
  300008 |  3008166 |      |     2 | {31208,300008}         | f    
  300008 |  3026610 |      |     2 | {31208,300008}         | f    
  300008 |  3002337 |      |     2 | {31208,300008}         | f    
  300008 |  3042177 |      |     2 | {31208,300008}         | f    
  300008 |  3029488 |      |     2 | {31208,300008}         | f    
  300008 |  3034126 |      |     2 | {31208,300008}         | f    
  300008 |  3000904 |      |     2 | {31208,300008}         | f    
  300008 |  3046920 |      |     2 | {31208,300008}         | f    
  300008 |  3006311 |      |     2 | {31208,300008}         | f    
  300008 |  3042123 |      |     2 | {31208,300008}         | f    
  300008 |  3012303 |      |     2 | {31208,300008}         | f    
  300008 |  3009913 |      |     2 | {31208,300008}         | f    
  300008 |  3038805 |      |     2 | {31208,300008}         | f    
  300008 |  3024898 |      |     2 | {31208,300008}         | f    
  300008 |  3029405 |      |     2 | {31208,300008}         | f    
  300008 |  3039547 |      |     2 | {31208,300008}         | f    
  300008 |  3021601 |      |     2 | {31208,300008}         | f    
  300008 |  3018982 |      |     2 | {31208,300008}         | f    
  300008 |  3023281 |      |     2 | {31208,300008}         | f    
  300008 |  3019031 |      |     2 | {31208,300008}         | f    
  300008 |  3002117 |      |     2 | {31208,300008}         | f    
  300008 |  3020658 |      |     2 | {31208,300008}         | f    
  300008 |  3034837 |      |     2 | {31208,300008}         | f    
  300008 |  3045863 |      |     2 | {31208,300008}         | f    
  300008 |  3006653 |      |     2 | {31208,300008}         | f    
  300008 |  3004421 |      |     2 | {31208,300008}         | f    
  300008 |  3040668 |      |     2 | {31208,300008}         | f    
  300008 |  3012980 |      |     2 | {31208,300008}         | f    
  300008 |  3030222 |      |     2 | {31208,300008}         | f    
  300008 |  3001689 |      |     2 | {31208,300008}         | f    
  300008 |  3015679 |      |     2 | {31208,300008}         | f    
  300008 |  3038388 |      |     2 | {31208,300008}         | f    
  300008 |  3028300 |      |     2 | {31208,300008}         | f    
  300008 |  3018016 |      |     2 | {31208,300008}         | f    
  300008 |  3030565 |      |     2 | {31208,300008}         | f    
  300008 |  3007787 |      |     2 | {31208,300008}         | f    
  300008 |  3002142 |      |     2 | {31208,300008}         | f    
  300008 |  3031469 |      |     2 | {31208,300008}         | f    
  300008 |  3004708 |      |     2 | {31208,300008}         | f    
  300008 |  3008453 |      |     2 | {31208,300008}         | f    
  300008 |  3023592 |      |     2 | {31208,300008}         | f    
 3032152 | 30327610 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30347138 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30324805 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30309501 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30318027 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30300820 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30310825 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30305623 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336901 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30321303 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30304624 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30343224 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30321132 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30308929 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30329000 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30319366 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30341162 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30349290 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30315173 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30302537 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30328276 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30328416 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30305538 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30331586 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30338438 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30302040 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30318870 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30347906 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30333042 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30322289 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30344294 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30310653 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30319427 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30319099 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30320154 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30337454 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30319919 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30330979 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30343077 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30306820 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30302283 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30347701 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30300044 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30323415 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30306630 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30329044 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30342781 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30347792 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30328334 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30307954 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30300329 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30306609 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336370 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30305867 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30338195 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30324808 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30307907 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30307065 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30322714 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30340949 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30329354 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30317008 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30301602 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30348782 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336107 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30321756 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336236 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30306026 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30302735 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30329312 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30312846 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30305018 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30327013 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30312890 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30328433 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30333643 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30341934 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30321213 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30331435 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30320267 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30329167 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30331764 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30326876 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30315537 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30337631 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30315071 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30340345 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30345538 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30322136 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30313059 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336487 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30301491 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30330067 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30338088 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30300272 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30316175 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30309844 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30336508 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30322201 |      |     3 | {31208,300008,3032152} | f    
 3032152 | 30312579 |      |     3 | {31208,300008,3032152} | f    
(300 rows)    
    
Time: 3.245 ms    

多列路径和CYCLE判断,语法修改如下,使用ROW数组:

WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (  
        SELECT g.id, g.link, g.data, 1,  
          ARRAY[ROW(g.f1, g.f2)],  
          false  
        FROM graph g  
      UNION ALL  
        SELECT g.id, g.link, g.data, sg.depth + 1,  
          path || ROW(g.f1, g.f2),  
          ROW(g.f1, g.f2) = ANY(path)  
        FROM graph g, search_graph sg  
        WHERE g.id = sg.link AND NOT cycle  
)  
SELECT * FROM search_graph;  

参考

https://www.postgresql.org/docs/10/static/queries-with.html

《PostgreSQL 图式搜索(graph search)实践 - 百亿级图谱,毫秒响应》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
6月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
435 2
|
2月前
|
Oracle 关系型数据库
oracle的start with connect by prior如何使用 整理
oracle的start with connect by prior如何使用 整理
102 4
|
6月前
|
存储 数据采集 Oracle
oracle connect by很强,但是要慎用,不然有你哭的时候
oracle connect by很强,但是要慎用,不然有你哭的时候
228 0
|
6月前
|
SQL Oracle 关系型数据库
Connect to Autonomous Database Using Oracle Database Tools
Connect to Autonomous Database Using Oracle Database Tools
61 1
|
6月前
|
Oracle 关系型数据库 Linux
Oracle Linux: How To Disable NUMA At OS Level (Doc ID 2193586.1)
Oracle Linux: How To Disable NUMA At OS Level (Doc ID 2193586.1)
68 1
|
6月前
|
人工智能 Oracle 关系型数据库
一篇文章弄懂Oracle和PostgreSQL的Database Link
一篇文章弄懂Oracle和PostgreSQL的Database Link
|
6月前
|
SQL Oracle 关系型数据库
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
|
Oracle 关系型数据库 数据库
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
520 0
|
SQL Oracle 关系型数据库
物化视图(Oracle与PostgreSQL对比)
物化视图(Oracle与PostgreSQL对比)

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 推荐镜像

    更多
    下一篇
    无影云桌面