带 parent 的sql唯一约束

标签 sql postgresql

在 postgres 9.5 中,我有这个 sql 约束:

CONSTRAINT gp_property_name_unique UNIQUE (name, parent_id, active)

这有效,但前提是 parent_id 不为空。如果名称字段是根字段,我如何确保它是唯一的? (=> parent_id 为空)

谢谢。

最佳答案

您可以添加一个唯一索引,例如:

CREATE UNIQUE INDEX gp_property_name_unique_parent 
ON your_table(name, active) WHERE parent_id IS NULL;

此索引仅适用于 parent_idnull 的行。因为它是唯一的,所以它的工作方式与请求的约束类似。事实上,postgres 中的唯一约束是基于唯一索引的。

关于带 parent 的sql唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500154/

相关文章:

c++ - 使用 MysqlConnector/C 还是 MysqlConnector/C++?

sql - `INCLUDE` 在索引中做什么?

mysql - SQL 性能 : Which is quicker? IN() 与 JOIN

sql - 如何在 PostgreSQL 中通过数组正确创建多个条目?

sql - 查询返回确切的行数

sql - 如何设置大字符串作为参数而不得到ORA-01460 : unimplemented or unreasonable conversion error?

SQL 查询/函数

sql - 从仓库事实表中获取成功/失败率的最佳查询

ruby-on-rails - ActiveRecord::NoDatabaseError: FATAL: role "postgres"does not exist 当我尝试在 rails 中迁移 bd

postgresql - Geodjango/postgres 外键关系,如空间索引