我有一个这种布局的表:
CREATE TABLE Favorites
(
FavoriteId uuid NOT NULL PRIMARY KEY,
UserId uuid NOT NULL,
RecipeId uuid NOT NULL,
MenuId uuid
)
Run Code Online (Sandbox Code Playgroud)
我想创建一个类似于此的唯一约束:
ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId);
Run Code Online (Sandbox Code Playgroud)
但是,这将允许多行具有相同的(UserId, RecipeId)if MenuId IS NULL.我想允许NULL在MenuId存储不具有关联菜单中的最爱,但我只希望每个用户/食谱对这些行中最多只有一个.
我到目前为止的想法是:
使用一些硬编码的UUID(例如全零)而不是null.
但是,MenuId每个用户的菜单都有一个FK约束,所以我必须为每个用户创建一个特殊的"空"菜单,这是一个麻烦.
使用触发器检查是否存在空条目.
我认为这是一个麻烦,我喜欢尽可能避免触发器.另外,我不相信他们能保证我的数据永远不会处于不良状态.
只需忘记它并检查中间件或插入函数中是否存在空条目,并且没有此约束.
我正在使用Postgres 9.0.
我有什么方法可以忽略吗?
我有一个db表说,persons在Postgres中由另一个有列名称的团队传下来,"first_Name".现在我正在尝试使用PG指令器在此列名称上查询此表.
select * from persons where first_Name="xyz";
Run Code Online (Sandbox Code Playgroud)
它只是回归
错误:列"first_Name"不存在
不确定我是在做一些愚蠢的事情,还是我找不到这个问题的解决方法?
我在 Postgres 数据库中有一个现有的表,该表累积了重复值。我们已清除表并重新填充值,但希望防止再次发生重复。因此我们需要 a 来添加约束。
表名:camembert,样本数据:
| handle | id | num |
| ------ | --- | ----- |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 869 | AC003 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
| 259 | 856 | AC005 |
etc.
Run Code Online (Sandbox Code Playgroud)
下面是这个问题的一个例子(我们实际上有所有东西的三份)
该约束应允许前两列具有重复值,但是,第三列是使该行唯一的区别因素。例如,当表被正确填充后,它看起来如下:
| handle | id | num |
| ------ | ----- | ----- …Run Code Online (Sandbox Code Playgroud)