PostgreSQL插入后触发以在另一个表上写入

问题描述

我正在尝试为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));

解决方法

您不应该将参数传递给触发函数:它会自动接收java.util.Date,在这里就足够了。另外,触发函数应返回一个java.util.Date

考虑:

Date

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...