首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PostgreSQL中的数组中添加非重复项?

如何在PostgreSQL中的数组中添加非重复项?
EN

Stack Overflow用户
提问于 2021-11-11 06:46:13
回答 1查看 35关注 0票数 0
代码语言:javascript
复制
 question_id | person_id |      question_title      |     question_source      | question_likes | question_dislikes |           created_at            
-------------+-----------+--------------------------+--------------------------+----------------+-------------------+---------------------------------
           2 | 2         | This is question Title 1 | This is question Video 1 |                |                   | 2021-11-11 10:32:53.93505+05:30
           3 | 3         | This is question Title 1 | This is question Video 1 |                |                   | 2021-11-11 10:32:58.69947+05:30
           1 | 1         | This is question Title 1 | This is question Video 1 | {2}            | {1}               | 2021-11-11 10:32:45.81733+05:30

我尝试在数组question_likesquestion_dislikes中添加值。我无法理解使用sql在数组中仅添加非重复项的查询。我希望数组中的所有项都是唯一的。

下面是我用来创建问题表的查询:

代码语言:javascript
复制
CREATE TABLE questions(
    question_id BIGSERIAL PRIMARY KEY,
    person_id VARCHAR(50) REFERENCES person(person_id) NOT NULL,
    question_title VARCHAR(100) NOT NULL,
    question_source VARCHAR(100),
    question_likes TEXT[] UNIQUE,
    question_dislikes TEXT[] UNIQUE,
    created_at TIMESTAMPTZ DEFAULT NOW()
);
代码语言:javascript
复制
UPDATE questions 
  SET question_likes = array_append(question_likes,$1) 
WHERE question_id=$2 
RETURNING *

我可以对上面的查询进行哪些更改才能使其正常工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 07:13:06

这是使用非规范化模型的一个缺点。只是因为Postgres支持数组,并不意味着它们是解决使用关系数据建模的最佳实践更好地解决问题的好选择。

然而,在您的情况下,您可以通过向WHERE子句添加额外的条件来简单地防止这种情况:

代码语言:javascript
复制
UPDATE questions 
  SET question_likes = array_append(question_likes,$1) 
WHERE question_id=$2 
  AND $1 <> ALL(question_likes)
RETURNING *

如果在数组中的任何位置找到$1的值,这将完全阻止更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69924175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档