Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres主键允许冲突_Postgresql_Constraints_Primary Key_Collision - Fatal编程技术网

Postgresql Postgres主键允许冲突

Postgresql Postgres主键允许冲突,postgresql,constraints,primary-key,collision,Postgresql,Constraints,Primary Key,Collision,该表的行为应类似于主键(Item_id、Date、Status)。但是,允许多个取消状态 Item_id |Date |Status -------------------------------- 1 |2017-01-01 |Cancelled 1 |2017-01-01 |Cancelled 1 |2017-01-01 |Completed 在这种情况下,我可以插入: ('1', '2017-01-01', 'Ca

该表的行为应类似于主键(Item_id、Date、Status)。但是,允许多个取消状态

Item_id  |Date       |Status   
--------------------------------
1        |2017-01-01 |Cancelled   
1        |2017-01-01 |Cancelled   
1        |2017-01-01 |Completed
在这种情况下,我可以插入:

('1', '2017-01-01', 'Cancelled')
在这种情况下,查询应该返回错误:

('1', '2017-01-01', 'Completed')

有没有一种方法可以使用约束或其他实现来实现此目标?

您所要求的是自我冲突的。根据定义,主键是唯一的,因此如果主键是(Item_id,Date,Status),则不可能有多个具有相同元组(Item_id,Date,Status)的行。例如,如果两行都由相同的元组标识,则无法区分这两行(1,2018-01-01,“取消”)


看起来您希望对每个元组(item_id,date)强制执行单个
已完成的
行,这是可行的:请参阅。您需要在表中添加一个主键列。

您所要求的是自相矛盾的。根据定义,主键是唯一的,因此如果主键是(Item_id,Date,Status),则不可能有多个具有相同元组(Item_id,Date,Status)的行。例如,如果两行都由相同的元组标识,则无法区分这两行(1,2018-01-01,“取消”)


看起来您希望对每个元组(item_id,date)强制执行单个
已完成的
行,这是可行的:请参阅。您需要将主键列添加到表中。

能否共享表的结构?它是如何创建的?问题是如何构造表以实现此行为。那么应该允许具有相同项目id和日期的多个“取消”状态。明白了。看到我的回答了吗?你能分享一下桌子的结构吗?它是如何创建的?问题是如何构造表以实现此行为。那么应该允许具有相同项目id和日期的多个“取消”状态。明白了。看到我的答案了吗