在 pgpool 中,在 postgresql 函数中使用删除查询时,它并没有从所有服务器中删除数据
In pgpool while using delete query inside postgresql function ,it is not deletingdata from all servers
我在 pgpool 中创建了以下函数。
CREATE OR REPLACE Function fun1(Id int)
RETURNS boolean as $executionStatus$
DECLARE
BEGIN
DELETE FROM table1 where table1_id = Id ;
DELETE from table2 where table2_id = Id ;
DELETE from table3 where table3_id = Id ;
RETURN true;
END;
$executionStatus$ LANGUAGE plpgsql;
我运行 在 pgpool
的 postgres shell 中遵循命令
select fun1(1);
只删除master的数据。我再次尝试然后从不同的 server.So 中删除它,在这种情况下复制失败。但是如果我单独使用删除查询那么它正在工作 fine.It 正在从所有服务器中删除数据。
DELETE FROM table1 where table1_id = 1 ;DELETE from table2 where table2_id = 1 ;DELETE from table3 where table3_id = 1 ;
请告诉我如何解决这个问题。
我自己找到了答案
在复制模式下(replication_mode = on),SELECT 是负载平衡的,只有一个 PostgreSQL
服务器接收命令。解决方案是:
1) 在SELECT.
前添加“/*REPLICATION*/”注释
2) 将 func1 添加到 black_function_list.
我在 pgpool 中创建了以下函数。
CREATE OR REPLACE Function fun1(Id int)
RETURNS boolean as $executionStatus$
DECLARE
BEGIN
DELETE FROM table1 where table1_id = Id ;
DELETE from table2 where table2_id = Id ;
DELETE from table3 where table3_id = Id ;
RETURN true;
END;
$executionStatus$ LANGUAGE plpgsql;
我运行 在 pgpool
的 postgres shell 中遵循命令select fun1(1);
只删除master的数据。我再次尝试然后从不同的 server.So 中删除它,在这种情况下复制失败。但是如果我单独使用删除查询那么它正在工作 fine.It 正在从所有服务器中删除数据。
DELETE FROM table1 where table1_id = 1 ;DELETE from table2 where table2_id = 1 ;DELETE from table3 where table3_id = 1 ;
请告诉我如何解决这个问题。
我自己找到了答案 在复制模式下(replication_mode = on),SELECT 是负载平衡的,只有一个 PostgreSQL 服务器接收命令。解决方案是:
1) 在SELECT.
前添加“/*REPLICATION*/”注释2) 将 func1 添加到 black_function_list.