【发布时间】:2020-12-21 11:53:42
【问题描述】:
我在 postgres 中有一个函数,可以在我的表中发送有关 CRUD 操作的事件。但是问题是它只适用于具有id 列的表,该列是主键。如何更改它以便我可以使用任何列作为主键?
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
SET search_path = PUBLIC,
pg_catalog;
CREATE OR REPLACE FUNCTION psycopg2_pgevents_create_event() RETURNS TRIGGER AS $function$
BEGIN
IF (TG_OP = 'DELETE') THEN
PERFORM pg_notify('psycopg2_pgevents_channel',
json_build_object(
'event_id', uuid_generate_v4(),
'event_type', TG_OP,
'schema_name', TG_TABLE_SCHEMA,
'table_name', TG_TABLE_NAME,
'row_id', OLD.id -------- this is not always "id"
)::text
);
RETURN NULL;
ELSE
raise notice 'Value: %', NEW;
PERFORM pg_notify('psycopg2_pgevents_channel',
json_build_object(
'event_id', uuid_generate_v4(),
'event_type', TG_OP,
'schema_name', TG_TABLE_SCHEMA,
'table_name', TG_TABLE_NAME,
'row_id', NEW.id, -------- this is not always "id"
'data', NEW
)::text
);
RETURN NULL;
END IF;
END;
$function$ LANGUAGE PLPGSQL;
SET search_path = "$user",
PUBLIC;
【问题讨论】:
标签: sql postgresql sql-function