Pgsql system table query - reverse lookup table primary key index field and type definition

Pgsql system table query - reverse lookup table primary key index field and type definition

-- 查询schema下有什么表
SELECT *
FROM information_schema.tables
where table_schema = 'my_schema'
order by table_name;

-- 查询表有什么列(字段信息,含类型等等)
SELECT *
FROM information_schema.columns
where table_schema = 'my_schema'
  and table_name in ('my_table', 'my_table_2')
order by table_name, ordinal_position;

--查询表有什么索引
SELECT *
FROM pg_indexes
WHERE schemaname = 'my_schema'
  AND tablename = 'my_table';

--查看表有什么索引(contype索引类型:c = 检查约束;f = 外键约束;p = 主键约束;u = 约束;t = 触发器约束)
SELECT
    na.nspname table_schema,
    cl.relname table_name,
    co.conname ,
    co.contype,
    co.conkey,  --主键字段排序码(pg_attribute.attnum)
    co.confkey  --外键字段排序码(pg_attribute.attnum)
FROM pg_catalog.pg_class cl
     join pg_catalog.pg_namespace na on cl.relnamespace = na.oid
     join pg_constraint co on co.conrelid = cl.oid
WHERE na.nspname = 'my_schema'
  and cl.relname in ('my_table', 'my_table_2');

--查询表主键索引字段名
select
    n.nspname
    ,t.schemaname
    ,a.attname
    ,a.attnum
    ,format_type(a.atttypid, a.atttypmod) attr_type
    ,co.contype
from pg_namespace n
     join pg_tables t on t.schemaname = n.nspname
     join pg_class c on c.relname = t.tablename and c.relnamespace = n.oid
     join pg_attribute a on a.attrelid = c.oid
     left join pg_constraint co on  co.conrelid = c.oid and a.attnum = any(co.conkey) --conkey::text[] 需要使用 any() 查询
where n.nspname = 'my_schema'
  and t.tablename = 'my_table'
  and a.attnum > 0
  and co.contype = 'p';

Guess you like

Origin blog.csdn.net/xxj_jing/article/details/127530903