检索主键列

来自 PostgreSQL wiki
跳转到导航跳转到搜索

代码片段

检索主键列

适用于 PostgreSQL

任何版本

编写语言

SQL

依赖


这将返回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)