【问题标题】:PostgreSQL Trigger After Insert to write on another tablePostgreSQL 插入后触发器写入另一个表
【发布时间】:2020-08-19 15:30:48
【问题描述】:

我正在尝试为 pgsql 编写一个触发器,以在特定表上保存插入、更新和删除的日志。

我在创建触发器时在位置 171 上遇到错误,但我真的不知道为什么。

日志表

+----------+-----------+---------------------------+
|table_name|column_name|data_type                  |
+----------+-----------+---------------------------+
|logs      |id         |bigint                     |
|logs      |action     |smallint                   |
|logs      |table      |character varying          |
|logs      |primary    |bigint                     |
|logs      |log        |json                       |
|logs      |processed  |boolean                    |
|logs      |created_at |timestamp without time zone|
|logs      |updated_at |timestamp without time zone|
+----------+-----------+---------------------------+

函数和触发器

CREATE OR REPLACE FUNCTION insert_log (INT, VARCHAR, INT, VARCHAR) RETURNS INT AS $$
    BEGIN
        INSERT INTO public.logs ("action", "table", "primary", "log")
            VALUES ($1, $2, $3, $4)
            RETURNING id;
    END
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_clientes_insert
    AFTER INSERT ON xxx.legacy_clientes
    FOR EACH ROW
    EXECUTE FUNCTION insert_log (1, "clientes", id, row_to_json(NEW));

【问题讨论】:

    标签: sql postgresql triggers sql-insert postgresql-11


    【解决方案1】:

    您不应该将参数传递给触发器函数:它会自动接收new,这已经足够了。此外,触发函数应该返回一个TRIGGER

    考虑:

    CREATE OR REPLACE FUNCTION insert_log () 
    RETURNS TRIGGER AS $$
    BEGIN
        INSERT INTO public.logs ("action", "table", "primary", "log")
            VALUES (1, NEW.clientes, NEW.id, row_to_json(NEW);
        RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    CREATE TRIGGER trigger_clientes_insert
    AFTER INSERT ON xxx.legacy_clientes
    FOR EACH ROW
    EXECUTE PROCEDURE insert_log();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多