Che*_*o47 11 postgresql json unique-constraint
让我们以表 peoples 为例,它只有 2 个字段:id 和 data(json)。
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Run Code Online (Sandbox Code Playgroud)
我想为“pos”字段创建约束,它必须是唯一的。我在互联网上搜索了 JSON 约束,但没有结果。
我该如何处理这个问题?
joa*_*olo 25
首先也是最重要的:我同意@a_horse_with_no_name 和@dezso 的评论:你应该规范化你的数据。JSON不是为了那个。
但是,如果我无法理解的某种原因真的使这成为一个优势,则有可能:
创建基于表达式UNIQUE INDEX
:
CREATE UNIQUE INDEX people_data_pos_idx ON peoples( (data->>'pos') ) ;
Run Code Online (Sandbox Code Playgroud)
如果此时您尝试将以下数据插入到您的表中(使用已经存在的 ->>pos):
INSERT INTO peoples(data)
VALUES
('{"name": "Eve", "pos":"DBA", "age":34}') ;
Run Code Online (Sandbox Code Playgroud)
你得到这个作为回应:
ERROR: duplicate key value violates unique constraint "people_data_pos_idx"
SQL state: 23505
Detail: Key ((data ->> 'pos'::text))=(DBA) already exists.
Run Code Online (Sandbox Code Playgroud)
注意:我假设它data.pos
总是一个字符串。如果要概括,可以( (data->'pos') )
改用。然后您将索引一个 JSON(B) 表达式而不是文本。检查JSON 函数和运算符。
归档时间: |
|
查看次数: |
12465 次 |
最近记录: |