在 pgpool 中,当在 postgresql 函数中使用删除查询时,它不会从所有服务器中删除数据

Pri*_*tha 5 database postgresql pgpool

我在 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;
Run Code Online (Sandbox Code Playgroud)

我在 pgpool 的 postgres shell 中运行以下命令

select fun1(1);
Run Code Online (Sandbox Code Playgroud)

仅从主站删除数据。我再次尝试,然后它从不同的服务器中删除。因此在这种情况下复制失败。但如果我单独使用删除查询,那么它工作正常。它正在从所有服务器中删除数据。

DELETE FROM table1 where table1_id =  1 ;DELETE from table2 where table2_id =  1 ;DELETE from table3 where table3_id =  1 ;
Run Code Online (Sandbox Code Playgroud)

请让我知道如何解决这个问题。

Pri*_*tha 3

我自己找到答案在复制模式(replication_mode = on)中,SELECT 是负载平衡的,并且只有一台 PostgreSQL 服务器接收命令。解决方案是:

1)在SELECT前面添加“/*REPLICATION*/”注释。

2) 将 func1 添加到 black_function_list。