检索主键列
来自 PostgreSQL wiki
跳转到导航跳转到搜索
这将返回tablename 表中主键的所有列的名称和数据类型。
SELECT a.attname, format_type(a.atttypid, a.atttypmod) AS data_type
FROM pg_index i
JOIN pg_attribute a ON a.attrelid = i.indrelid
AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'tablename'::regclass
AND i.indisprimary;
注意
- 要查看所有索引列,请删除
indisprimary
限制。 - 除非显式地使用模式限定,否则表名默认为当前
search_path
中的第一个匹配项:'public.tablename'::regclass
- 对于非法的名称(大写字母、保留字等),表名必须用双引号括起来:
'"oDD table name"'::regclass
- 使用
quote_ident()
自动加双引号,对结果中的列名也有效:quote_ident(a.attname)