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

莫里斯·佐丹奴(Maurice Giordano)

这是我第一次创建触发器,所以有些困惑。我正在遵循本指南

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

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我需要做的是增加列userpostCount对于每个新post创建的。外键是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 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表示法。

来自文档不要在目标列的规范中包括表的名称-例如,UPDATE选项卡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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

插入后触发更新表列吗?

来自分类Dev

插入后,Oracle触发该更新记录

来自分类Dev

SQL Server:触发后插入,更新

来自分类Dev

雄辩-插入相关模型

来自分类Dev

PostgreSQL插入或更新触发函数易失性类别

来自分类Dev

postgresql 10实现触发器插入或更新

来自分类Dev

插入触发器后更新同一表

来自分类Dev

根据更新后的触发器插入更改日志

来自分类Dev

在插入和联接表后触发以进行更新

来自分类Dev

插入触发器后更新同一表

来自分类Dev

PLSQL触发器在插入后更新记录

来自分类Dev

插入后触发第二个表的更新

来自分类Dev

插入更新和删除后的 SQL Server 触发器

来自分类Dev

Laravel-插入相关模型

来自分类Dev

插入后循环触发

来自分类Dev

插入后循环触发

来自分类Dev

更改表后更新列的POSTGRESQL触发器

来自分类Dev

插入和更新后未触发SQL Server触发器

来自分类Dev

为什么在触发了代替触发器后无法插入或更新有效数据?

来自分类Dev

插入和更新后未触发SQL Server触发器

来自分类Dev

更新相关模型的时间戳

来自分类Dev

PL/SQL 触发器在更新或插入后更新同一个表

来自分类Dev

插入的PostgreSQL触发器

来自分类Dev

插入的PostgreSQL触发器

来自分类Dev

相关模型更新模型字段更改

来自分类Dev

插入后触发错误

来自分类Dev

插入后触发增加表

来自分类Dev

错误触发插入后插入

来自分类Dev

触发SQL插入和更新