gpt4 book ai didi

postgresql - 插入后触发,更新相关模型Postgresql

转载 作者:行者123 更新时间:2023-11-29 13:27:46 25 4
gpt4 key购买 nike

这是我第一次创建触发器,所以我有点困惑。我正在关注 this guide .

这是我到目前为止所做的:

DROP TRIGGER IF EXISTS "update_metas" ON "post";
CREATE TRIGGER "update_metas"
AFTER INSERT ON "post"
FOR EACH ROW EXECUTE PROCEDURE update_post_count();

我有两个表:userpost。我需要做的是为每个新创建的 post 增加列 user.postCount。外键是postuser_id

我正在创建的过程如下:

CREATE FUNCTION update_post_count() RETURNS TRIGGER AS $updates_user_postCount$
BEGIN
-- I know that NEW contains the new post info, so I
-- can gather the user_id by doing NEW.post_id.
--
-- What exactly should I do here?
RETURN NEW;
END;
$updates_user_postCount$ LANGUAGE plpgsql;

我应该如何构建这个过程?我可以直接使用 SQL 查询吗,比如:

UPDATE "user"
SET "user"."post_count" = "user"."post_count" + 1
WHERE "user"."_id" = NEW.idol_id;

更新

我试过在过程中使用该 SQL 语句,但它返回错误 error: column "user"of relation "user"does not exist

这是我用来创建 userpost 表的 SQL 语句:

CREATE TABLE IF NOT EXISTS "user" (
_id BIGSERIAL UNIQUE,
__id TEXT UNIQUE,
fbid VARCHAR(100),
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(512) NOT NULL,
profile_picture VARCHAR(512),
profile_cover VARCHAR(512),
profile_about TEXT,
profile_birth_date BIGINT,
social_facebook VARCHAR(256),
social_twitter VARCHAR(256),
social_instagram VARCHAR(256),
post_count BIGINT,
highlighted BOOLEAN,
idol BOOLEAN,
free BOOLEAN,
blocked BOOLEAN
);

CREATE TABLE IF NOT EXISTS "post" (
_id BIGSERIAL UNIQUE,
__id TEXT UNIQUE,
idol_id BIGINT,
removed BOOLEAN,
free BOOLEAN,
created_at BIGINT,
hashtags VARCHAR(1024),
audio_src VARCHAR(512),
audio_size INTEGER,
audio_length INTEGER,
FOREIGN KEY ("idol_id") REFERENCES "user"("_id")
);

最佳答案

您的触发器功能基本正确。唯一的问题是 UPDATE 语句不能使用 table.column 表示法。

来自documentation : 不要在目标列的规范中包含表的名称——例如,UPDATE tab SET tab.col = 1 是无效的。

CREATE FUNCTION update_post_count() RETURNS TRIGGER AS $updates_user_postCount$
BEGIN
UPDATE "user"
SET "post_count" = "post_count" + 1
WHERE "_id" = NEW.idol_id;
RETURN NEW;
END;
$updates_user_postCount$ LANGUAGE plpgsql;

关于postgresql - 插入后触发,更新相关模型Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com