我正在尝试为 PostgresDB 创建一个带有 ecto 迁移的唯一索引。
def change do
create table(:categories) do
add(:name, :string)
add(:parent_id, references(:categories), null: true)
timestamps()
end
create(index(:categories, [:parent_id]))
create(
unique_index(:categories, [:name, :parent_id], name: :unique_categories_name_parent_id)
)
end
但是,当
parent_id
为 NULL
时,此功能不起作用。我知道 PostgresSQL 15 支持 NULLS NOT DISTINCT
但我的数据库是 v13。
有没有办法确保这里的parent_id为NULL的唯一名称字段?
您可以为以下情况创建额外的部分索引:
parent_id IS NULL
:
create unique_index(:categories, [:name], where: "parent_id IS NULL")
这将为您创建部分索引,仅在
name
时检查 parent_id IS NULL
字段是否唯一。