Fah*_*tha 25 postgresql index database-design constraint unique-constraint
是否可以具有如下自定义唯一约束?假设我有两个 colssubset和type,两个字符串(尽管数据类型可能无关紧要)。
如果type是“真”,那么我希望的组合type,并subset是唯一的。否则,没有约束。我在 Debian 上使用 PostgreSQL 8.4。
Erw*_*ter 37
换句话说,您希望列中的值在subset列为type“真”的行中是唯一的。
一个部分唯一索引会做到这一点:
CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';
Run Code Online (Sandbox Code Playgroud)
数据类型做的事情。如果该列type是boolean(可能应该是),则可以简化:
CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type;
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您甚至可以与NULLunique进行组合,否则这是不可能的。看:
这是对上面 Erwin 回答的补充,但 PostgreSQL 支持多种类型的索引。这些通常不是相互排斥的。您可以将这些视为:
这些都可以以各种方式组合。您在这里所做的就是使用唯一和部分功能,这样就可以为您提供部分唯一索引(这在您发现时非常有用。
但是假设您希望在 type 为 true 的子集字段上有一个不区分大小写的索引。然后你会添加一个函数定义:
CREATE INDEX my_index_name_idx_u ON tbl (lower(subset)) WHERE type;
Run Code Online (Sandbox Code Playgroud)
请注意,这会在类型为 true 的子集属性上调用的 lower() 函数的输出上创建一个唯一索引。
| 归档时间: |
|
| 查看次数: |
8732 次 |
| 最近记录: |