如何获得对索引的约束?

How to get constraints on indexes?

我正在创建需要收集数据库中所有类型数据的东西,包括每列使用的约束类型。不幸的是,似乎有两种方法可以向列添加约束(或者我不知道的更多方法),您可以添加 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)

有谁知道我可以获得这些信息的方法吗?谢谢

  • the postgres catalogs 生活在 pg_catalog 架构中
  • information_schema 建立在这个之上(作为一组视图)
  • information_schema 不完整,仅实现了 ANSI 委员会规定的内容(或多或少是所有实现的 GCD)
  • 索引不是 SQL 的一部分(但是 most/all SQL 实现有它们)

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

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

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