小编puc*_*hal的帖子

Postgres - 具有多列和 NULL 值的唯一约束

我对多列可能包含 NULL 值的 Postgres 唯一约束有问题。

让我们假设这种情况:

CREATE TEMP TABLE test (
  foo TEXT,
  bar TEXT,
  UNIQUE (foo, bar)
);

INSERT INTO test
VALUES 
  ('foo', NULL),
  ('foo', NULL),
  ('foo', 'bar'),
  ('foo', 'bar')
ON CONFLICT (foo, bar) DO NOTHING;
Run Code Online (Sandbox Code Playgroud)

Insert 将插入 ('foo', 'bar') 一次和 ('foo', NULL) 两次(即使直觉说它应该插入一次)。

在这种情况下,解决方案非常简单。我可以添加唯一索引

CREATE UNIQUE INDEX indx ON test (foo) WHERE bar IS NULL;
Run Code Online (Sandbox Code Playgroud)

但是当有更多列和不同类型(不仅仅是文本)时,问题就开始了。假设我们有 10 列,其中 9 列可以NULL有价值。也许我可以用大量的约束来解决它,但它根本不方便。

有没有更简单的方法来保持这样的行的唯一性?

postgresql

6
推荐指数
2
解决办法
1653
查看次数

标签 统计

postgresql ×1