1. 创建日志表
CREATE TABLE t_audit_log(
id serial,
ip varchar,
username text,
event_time_utc timestamp,
table_name text,
operation text,
before_value json,
after_value json
);
2. 创建获取ip的函数
CREATE OR REPLACE FUNCTION get_client_ip() RETURNS text AS $$
DECLARE
client_ip text;
BEGIN
SELECT inet_client_addr() INTO client_ip;
RETURN client_ip;
END;
$$ LANGUAGE plpgsql;
3.创建触发器函数
CREATE OR REPLACE FUNCTION audit_trigger() RETURNS trigger AS $$
DECLARE
old_row json := NULL;
new_row json := NULL;
BEGIN
IF TG_OP IN ('UPDATE','DELETE')
THEN
old_row = row_to_json(OLD);
END IF;
IF TG_OP IN ('INSERT','UPDATE')
THEN
new_row = row_to_json(NEW);
END IF;
INSERT INTO t_audit_log(ip,username, event_time_utc, table_name, operation, before_value, after_value )
VALUES (get_client_ip(),session_user, current_timestamp AT TIME ZONE 'UTC', TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME, TG_OP, old_row, new_row );
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
4. 创建触发器
CREATE TRIGGER insert_customer_trigger
BEFORE INSERT ON table_name
FOR EACH ROW
EXECUTE FUNCTION insert_customer_if_not_exists();