Я пытаюсь зафиксировать изменения данных в таблице и выполняю следующую функцию триггера ПОСЛЕ ВСТАВКИ ИЛИ ОБНОВЛЕНИЯ, а также ДО ПЕРЕД ОБНОВЛЕНИЕМ ИЛИ УДАЛЕНИЯ:
CREATE OR REPLACE FUNCTION cdc_test_function()
RETURNS trigger AS
$BODY$
DECLARE op cdc_operation_enum;
BEGIN
op = TG_OP;
IF (TG_WHEN = 'BEFORE') THEN
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_BEFORE';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT, DEFAULT, op, DEFAULT, DEFAULT, OLD.*);
ELSE
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_AFTER';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT, DEFAULT, op, DEFAULT, DEFAULT, NEW.*);
END IF;
RETURN NEW;
END;
Моя таблица изменений (CDC_TEST) фиксирует все правильно, и я могу отлично вписать записи INSERT и UPDATE в мою таблицу TEST. Однако, когда я пытаюсь УДАЛИТЬ, он отлично записывает запись УДАЛИТЬ в CDC_TEST, но эта запись остается в моей таблице TEST. Если я отключу триггер, то я могу просто УДАЛИТЬ из ТЕСТА. Вот код, который я использовал для создания своих таблиц, а также код для моего перечисления:
CREATE TABLE test
(
test_id serial NOT NULL,
value text NOT NULL,
CONSTRAINT test_pkey PRIMARY KEY (test_id )
)
CREATE TABLE cdc_test
(
cdc_test_id bigserial NOT NULL,
cdc_timestamp timestamp with time zone DEFAULT now(),
cdc_opeation cdc_operation_enum,
cdc_user name DEFAULT "current_user"(),
cdc_transaction_id bigint DEFAULT txid_current(),
test_id integer,
value text,
CONSTRAINT cdc_test_pkey PRIMARY KEY (cdc_test_id )
)
CREATE TYPE cdc_operation_enum AS ENUM( 'DELETE', 'INSERT', 'UPDATE_BEFORE', 'UPDATE_AFTER', 'UPDATE' );