Я использую PostgreSQL 12
У меня есть следующие две таблицы:
table_a:
table_a_id | version
1 | v1
2 | v1
3 | v1
4 | v2
5 | v2
6 | v2
table_b:
table_b_id | version | table_a_id
1 | v1 | 1
2 | v1 | 2
3 | v1 | 3
4 | v2 | 4
5 | v2 | 5
6 | v2 | 6
table_b должен ссылаться на ту же версию table_a_id, т. е. приведенные ниже данные являются действительной записью, поскольку table_a_id -> 1 принадлежит версии 'v1'
table_b_id | version | table_a_id
1 | v1 | 1
Но приведенные ниже данные являются недопустимой записью, поскольку table_a_id -> 4 принадлежит версии 'v2 '
table_b_id | version | table_a_id
1 | v1 | 4
Я новичок в Postgres функциях триггера
Я создал следующую функцию триггера для проверки ON перед вставкой или обновлением table_b:
CREATE FUNCTION version_check()
RETURNS TRIGGER AS
$BODY$
BEGIN
IF NOT EXISTS (
SELECT
*
FROM
"table_a"
WHERE
"table_a"."table_a_id" = NEW."table_a_id"
AND
"table_a"."version" = NEW."version";
)
THEN
RAISE EXCEPTION 'table_a and table_b Version do not match';
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
CREATE TRIGGER "version_check" BEFORE INSERT OR UPDATE ON "table_b"
FOR EACH ROW EXECUTE PROCEDURE version_check();
Я получаю следующую ошибку при сохранении функции запуска в pgAdmin 4
ERROR: syntax error at or near "BEGIN"
LINE 8: BEGIN
^
Я делаю какую-либо синтаксическую ошибку? Также будет ли работать вышеуказанная функция триггера нормально для моего требования?
Заранее спасибо!