我在 AWS RDS Postgresql 上有一个蓝绿部署,它基本上使用了 Postgresql 的逻辑复制。每当在绿色环境中的表 A 上进行插入时,我都希望插入到
我在 AWS RDS Postgresql 上有一个蓝绿部署,它基本上使用 Postgresql 的逻辑复制。每当在绿色环境中的表 A 上进行插入时,我都希望将其插入到绿色环境中的表 A 和 A 分区中。
对于这种情况,我使用了一个触发器,每当触发时就会调用一个函数:
CREATE OR REPLACE TRIGGER some_trigger
BEFORE INSERT ON A
FOR EACH ROW
EXECUTE function insert_to_B ();
CREATE OR REPLACE FUNCTION insert_to_B ()
RETURNS TRIGGER
LANGUAGE plpgsql
SET default_transaction_read_only = off
AS $TRIG$
BEGIN
IF TG_OP = 'INSERT' THEN
INSERT INTO public.B VALUES ( NEW.*);
RETURN NEW;
END IF;
END
$TRIG$;
问题是,目前 rds 仅允许您在会话级别修改 default_transaction_read_only。
这导致插入失败: 错误:无法在只读事务中执行 INSERT
有办法解决这个问题吗?应用程序可以将此插入包装在可以设置事务读写的事务块中吗?还有其他解决方案吗?