如何在PostgreSQL中提取表的唯一列的名称?

时间:2019-12-11 10:35:22

标签: postgresql information-schema

假设我在PorstreSQL中有一个表定义为:

CREATE TABLE my_table (
  id serial not null primary key,
  var1 text null,
  var2 text null unique,
  var3 text null,
  var4 text null unique
);

是否有对information_schema的查询,仅提供唯一列的名称?理想的响应应该是:

var2
var4

查询应忽略多个列的唯一键。

1 个答案:

答案 0 :(得分:1)

您需要information_schema.table_constraintsinformation_schema.constraint_column_usage

SELECT table_schema, table_name, column_name
FROM information_schema.table_constraints AS c
   JOIN information_schema.constraint_column_usage AS cc
      USING (table_schema, table_name, constraint_name)
WHERE c.constraint_type = 'UNIQUE';

如果您要跳过包含多列的约束,请使用分组:

SELECT table_schema, table_name, min(column_name)
FROM information_schema.table_constraints AS c
   JOIN information_schema.constraint_column_usage AS cc
      USING (table_schema, table_name, constraint_name)
WHERE c.constraint_type = 'UNIQUE'
GROUP BY table_schema, table_name
HAVING count(*) = 1;