我在postgresql中有一个表,比方说用户:
CREATE TABLE users(
user_id bigint NOT NULL,
username character varying(24) NOT NULL,
password character varying(64) NOT NULL,
timestamp_created timestamp with time zone DEFAULT NOW() NOT NULL,
new boolean DEFAULT FALSE NOT NULL
);使用下面的查询,我选择所有用户
SELECT * FROM users;我想要实现的是:当选择一行时,'new‘的值应该从false更新为true。
postgresql触发器函数中没有“前/后选择”,是否有类似的内容?
编辑:我正在使用NodeJS。目前,我将返回的行的所有用户ID存储在一个数组中,并执行以下查询:
UPDATE users SET new = true WHERE user_id = ANY($1);$1是用户ID数组的占位符。
有更方便的方法吗?
发布于 2021-02-17 08:56:55
一个有点复杂的方法可能是
WITH new_users AS (
UPDATE users SET new = TRUE
WHERE NOT new RETURNING /* all columns except "new" */
)
SELECT /* all columns except "new" */
FROM new_users
UNION
SELECT /* all columns except "new" */
FROM users;UNION将消除重复。
发布于 2021-02-17 08:43:34
您不能通过选择来实现这一点,但是您可以这样做:
UPDATE users SET new=true WHERE new=false RETURNING *这将返回所有拥有new=false的用户,并更新表以在这些行中设置new=true。
https://dba.stackexchange.com/questions/285519
复制相似问题