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