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_likes和question_dislikes中添加值。我无法理解使用sql在数组中仅添加非重复项的查询。我希望数组中的所有项都是唯一的。
下面是我用来创建问题表的查询:
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()
);UPDATE questions
SET question_likes = array_append(question_likes,$1)
WHERE question_id=$2
RETURNING *我可以对上面的查询进行哪些更改才能使其正常工作?
发布于 2021-11-11 07:13:06
这是使用非规范化模型的一个缺点。只是因为Postgres支持数组,并不意味着它们是解决使用关系数据建模的最佳实践更好地解决问题的好选择。
然而,在您的情况下,您可以通过向WHERE子句添加额外的条件来简单地防止这种情况:
UPDATE questions
SET question_likes = array_append(question_likes,$1)
WHERE question_id=$2
AND $1 <> ALL(question_likes)
RETURNING *如果在数组中的任何位置找到$1的值,这将完全阻止更新。
https://stackoverflow.com/questions/69924175
复制相似问题