我使用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_idi.e 下面的数据是有效的,因为 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触发函数的新手
我创建了以下触发函数来验证对table_b的ON BEFORE INSERT或UPDATE。
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
^
我是不是犯了什么语法错误?另外,上面的触发功能是否能满足我的要求?
先谢谢你!