如何区分 pg_type 中的独立复合类型和表复合类型?

Rei*_*ain 5 postgresql

查询时pg_type,我感兴趣的是识别独立的复合类型(用户定义的),而不是与表一起创建的复合类型。也许有一种查找方法pg_class(使用typrelid)可能会有所帮助,但目前尚不清楚我如何做到这一点。

Lau*_*lbe 3

属于表的复合类型对中的表具有内部pg_depend依赖性。您只需排除此类类型:

SELECT t.oid::regtype
FROM pg_type AS t
WHERE t.typtype = 'c'
   AND t.typnamespace NOT IN
          ('pg_catalog'::regnamespace, 'pg_toast'::regnamespace)
   AND NOT EXISTS (
          SELECT 1 FROM pg_depend AS d
          WHERE d.objid = t.oid
            AND d.classid = 'pg_type'::regclass
            AND d.refclassid = 'pg_class'::regclass
            AND d.deptype = 'i');
Run Code Online (Sandbox Code Playgroud)