<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi,</div><div><br></div><div>I have two server postgresql 10.X configured with streaming replication and two pgpool server in front of pg, watchdog to control pgpool ha and vip to access pgpool service.</div><div>I am getting this error at pgpool log:</div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20193-1] 2018-12-17 03:18:01: pid 12142: LOG: pool_send_and_wait: Error or notice message from backend: : DB node id: 1 backend pid: 24931 statement: "SAVEPOINT _EXEC_SVP_0x55594d617a10" message: "la orden SAVEPOINT sólo puede ser usada en bloques de transacción" </div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20193-2] 2018-12-17 03:18:01: pid 12142: LOCATION: pool_proto_modules.c:3317</div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20194-1] 2018-12-17 03:18:01: pid 12142: WARNING: packet kind of backend 1 ['E'] does not match with master/majority nodes packet kind ['C']</div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20194-2] 2018-12-17 03:18:01: pid 12142: LOCATION: pool_process_query.c:3635</div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20195-1] 2018-12-17 03:18:01: pid 12142: FATAL: failed to read kind from backend</div><div>Dec 17 03:18:01 XXXX1 pgpool12142: [20195-2] 2018-12-17 03:18:01: pid 12142: DETAIL: kind mismatch among backends. Possible last query was: "SAVEPOINT _EXEC_SVP_0x55594d617a10" kind details are: 0[C] 1[E: la orden SAVEPOINT sólo puede ser usada en bloques de transacción]</div><div><br></div><div>I think that there is an application that is connecting to pgpool using postgresql odbc driver because I have found the same savepoint name pattern at psqlodbc repository:</div><div><a href="https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=execute.c;hb=e0e512f5c18750e747164d9110bcf6752d013126#l399">https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=execute.c;hb=e0e512f5c18750e747164d9110bcf6752d013126#l399</a><br></div><div><a href="https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=execute.c;hb=e0e512f5c18750e747164d9110bcf6752d013126#l599">https://git.postgresql.org/gitweb/?p=psqlodbc.git;a=blob;f=execute.c;hb=e0e512f5c18750e747164d9110bcf6752d013126#l599</a></div><div>And I suppose that the Level of rollback on errors, it was set as Statement =2 </div><div><br></div><div>Config doc of odbc driver ( <a href="https://odbc.postgresql.org/docs/config.html">https://odbc.postgresql.org/docs/config.html</a> )</div><div>Specifies what to rollback should an error occur.</div><div>Nop(0): Don't rollback anything and let the application handle the error.<br></div><div>Transaction(1): Rollback the entire transaction.<br></div><div>Statement(2): Rollback the statement.<br></div><div>Setup note: This specification is set up with the PROTOCOL option parameter.<br></div><div>PROTOCOL=7.4-(0|1|2)<br></div><div>default value is Statement (it is Transaction for servers before 8.0).</div><div> </div><div>Looking at the log, backend 1 is got an Error  ['E']  and backend 0 had a complete command ['C'] packet kind to there was a kind mismatch among backends. But I don't understand why pgpool was getting that error. Under my knowledge our pgpool cluster has enabled load balancing so if a connection start/begin a transaction pgpool routes this to master node and routes the whole transaction to the master node and the previous error hasn't be thrown by pgpool.  Could you help to find out why is failing ?</div><div><br></div><div>Thanks</div><div><br></div><div><br></div><div><br></div></div></div></div></div></div>