gpt4 book ai didi

postgresql - 仅当 Postgresql 中的列不为空时,如何才能强制执行约束?

转载 作者:行者123 更新时间:2023-11-29 11:19:27 25 4
gpt4 key购买 nike

我想要一个仅在列不为空时才强制执行约束的解决方案。我似乎无法在文档中找到执行此操作的方法。

create table mytable(
table_identifier_a INTEGER,
table_identifier_b INTEGER,
table_value1,...)

根据数据的性质,我在建表的时候会有标识符b和一个值。在我们收到额外数据后,我将能够填充标识符 a。在这一点上,我想确保一个 unique key of (identifier_a, value1) 但前提是 identifier_a 存在。

希望这是有道理的,有人有什么想法吗?

最佳答案

嗯。唯一约束不会阻止多个 NULL 值。

CREATE TABLE mytable (
table_identifier_a INTEGER NULL,
table_identifier_b INTEGER NOT NULL,
table_value1 INTEGER NOT NULL,

UNIQUE(table_identifier_a, table_identifier_b)
);

请注意,我们可以向其中插入多个 NULL,即使 identifier_b匹配:

test=# INSERT INTO mytable values(NULL, 1, 2);
INSERT 0 1
test=# INSERT INTO mytable values(NULL, 1, 2);
INSERT 0 1
test=# select * from mytable;
table_identifier_a | table_identifier_b | table_value1
--------------------+--------------------+--------------
| 1 | 2
| 1 | 2
(2 rows)

但是我们不能创建重复的 (a,b) 对:

test=# update mytable set table_identifier_a = 3;
ERROR: duplicate key value violates unique constraint "mytable_table_identifier_a_key"

当然,您确实遇到了一个问题:您的表没有主键。你可能有数据模型问题。但你提供的还不够修复该问题的详细信息。

关于postgresql - 仅当 Postgresql 中的列不为空时,如何才能强制执行约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com