如何获得索引约束?

时间:2016-08-11 11:45:50

标签: database postgresql unique-constraint

我正在创建需要收集数据库中所有类型数据的内容,包括每列使用的约束类型。不幸的是,似乎有两种方法可以为列添加约束(或者甚至可能是我不知道的更多),您可以添加UNIQUE CONSTRAINT,也可以添加带有UNIQUE的INDEX。

我有这个问题:

select * from information_schema.table_constraints WHERE constraint_type='UNIQUE';

但问题是它没有检测到应用于INDEX的UNIQUE约束,它只能自己检测UNIQUE CONSTRAINTS,例如,它找不到:

Indexes: "index_videos_on_slug" UNIQUE, btree (slug)

有谁知道我可以获得这些信息的方式?感谢。

1 个答案:

答案 0 :(得分:1)

  • the postgres catalogs位于pg_catalog架构
  • information_schema建立在此之上(作为一组视图)
  • information_schema不完整,只实施ANSI委员会规定的内容(或多或少是所有实施的GCD)
  • 索引不是SQL的一部分(但大多数/所有SQL实现都有它们)

pg_index.indisunique(在pg_catalog架构中)就是你想要的。

BTW:如果要将现有索引提升为约束,可以使用alter ... using ...语法:

ALTER TABLE ... ADD constraint ... USING your_index_name;