Search code examples
databasepostgresqlpgpool

In pgpool while using delete query inside postgresql function ,it is not deletingdata from all servers


I have created following function in 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;

I run following command inside the postgres shell of pgpool

select fun1(1);

It is deleted the data only from master. I tried again then it is deleted from different server.So replication fails in this case. But if i use delete queries separately then it is working fine.It is deleting data from all servers.

DELETE FROM table1 where table1_id =  1 ;DELETE from table2 where table2_id =  1 ;DELETE from table3 where table3_id =  1 ;

Please let me know how to fix this issue .


Solution

  • I found answer myself In replication mode (replication_mode = on),the SELECT is load balanced and only one of the PostgreSQL servers receives the command. Solution would be:

    1) Add "/*REPLICATION*/" comment in front of the SELECT.

    2) Add func1 to the black_function_list.