Ecto 创建带有空值的唯一索引

问题描述 投票:0回答:1

我正在尝试为 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的唯一名称字段?

elixir ecto
1个回答
0
投票

您可以为以下情况创建额外的部分索引:

parent_id IS NULL
:

create unique_index(:categories, [:name], where: "parent_id IS NULL")

这将为您创建部分索引,仅在

name
时检查
parent_id IS NULL
字段是否唯一。

© www.soinside.com 2019 - 2024. All rights reserved.