0
鑑於typname
的複合類型,我如何找到所有組件類型的oids
遞歸地?使用WITH RECURSIVE查找所有複合類型組件類型
例子:
CREATE TYPE t_station AS (x INT,
y INT,
label VARCHAR);
CREATE TYPE t_address AS (city VARCHAR,
street VARCHAR,
no INT,
stations t_station[]);
CREATE TYPE t_employee AS (name VARCHAR,
age INT,
coins INT[],
notes VARCHAR,
address t_address);
我可以得到的類型t_employee
成員oids
:
SELECT
t.typname, t.oid, a.attname, a.atttypid
FROM
pg_attribute a INNER JOIN pg_type t ON a.attrelid = t.typrelid
AND t.typname = 't_employee'
但我需要遞歸的是,我想可以用WITH RECURSIVE
做到:
WITH RECURSIVE allattrs(typname, oid, attname, atttypid) AS (
select t.typname, t.oid, a.attname, a.atttypid from pg_attribute a inner join pg_type t on a.attrelid = t.typrelid and t.typname = 't_employee'
union all
select z.* from
(select t.typname, t.oid, a.attname, a.atttypid from pg_attribute a inner join pg_type t on a.attrelid = t.typrelid) z,
allattrs y where y.atttypid = z.oid
)
SELECT * FROM allattrs limit 100
;
但是,沒有找到內部的AR ray的t_station
複合型。
啊,真好!正是我需要的。我剛開始使用遞歸CTE,並且有一條學習曲線......但是PG功能真的很棒! – oberstet