Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Pgpool带负载平衡的主从复制-准备好的语句“;S“U 380”;不存在_Postgresql_Jpa_Database Replication_Master Slave_Pgpool - Fatal编程技术网

Postgresql Pgpool带负载平衡的主从复制-准备好的语句“;S“U 380”;不存在

Postgresql Pgpool带负载平衡的主从复制-准备好的语句“;S“U 380”;不存在,postgresql,jpa,database-replication,master-slave,pgpool,Postgresql,Jpa,Database Replication,Master Slave,Pgpool,我们使用pgpool以主从模式运行2台postgresql服务器,并进行负载平衡 有时(它不一致,其他时候工作正常),我在应用程序日志中看到此异常- 09-10-17 01:35:01:627-{ERROR}util.jdbceptionReporter 线程[https-jsse-nio-8443-exec-3];错误:无法在只读事务中执行更新 这是对应用服务器调用的write psql函数的调用。没有看到关于其他write语句的任何问题,只有这个 不知道是否是pgpool问题。我找到了原因,

我们使用pgpool以主从模式运行2台postgresql服务器,并进行负载平衡

有时(它不一致,其他时候工作正常),我在应用程序日志中看到此异常-

09-10-17 01:35:01:627-{ERROR}util.jdbceptionReporter 线程[https-jsse-nio-8443-exec-3];错误:无法在只读事务中执行更新

这是对应用服务器调用的write psql函数的调用。没有看到关于其他write语句的任何问题,只有这个


不知道是否是pgpool问题。

我找到了原因,这是针对更新数据库的psql函数,此类函数应包含在pgpool配置的黑函数列表中。

我找到了原因,这是针对更新数据库的psql函数,此类函数应包含在pgpool配置的黑函数列表中。

您需要告诉pgpool II SELECT语句中写入函数的用法。 原因是当在主从模式下启用负载平衡时,Pgpool将写查询发送到主数据库,并对读查询进行负载平衡。更具体地说,DELETE、INSERT、UPDATE等语句路由到Master,而SELECT获得负载平衡。现在的问题是,当SELECT语句使用写函数时,Pgpool仍然将该语句视为只读语句,并对其进行负载平衡。因为它没有函数定义的可见性。 所以简而言之,Pgpool II需要知道SELECT语句中函数的用法,这些语句可以写入数据库,以确保这样的SELECT不应该是负载平衡的

为此,你有两个选择

  • 使用Pgpool的黑色函数列表或白色函数列表 配置。

  • 对于包含write的查询,请使用
    /*无负载平衡*/
    前缀 功能

  • 但是后者需要修改现有应用程序的SQL语句,这使得它不是一个非常可行的选项。

    您需要告诉Pgpool II在SELECT语句中使用写函数的情况。 原因是当在主从模式下启用负载平衡时,Pgpool将写查询发送到主数据库,并对读查询进行负载平衡。更具体地说,DELETE、INSERT、UPDATE等语句路由到Master,而SELECT获得负载平衡。现在的问题是,当SELECT语句使用写函数时,Pgpool仍然将该语句视为只读语句,并对其进行负载平衡。因为它没有函数定义的可见性。 所以简而言之,Pgpool II需要知道SELECT语句中函数的用法,这些语句可以写入数据库,以确保这样的SELECT不应该是负载平衡的

    为此,你有两个选择

  • 使用Pgpool的黑色函数列表或白色函数列表 配置。

  • 对于包含write的查询,请使用
    /*无负载平衡*/
    前缀 功能


  • 但后者需要在现有应用程序的SQL语句中进行修改,这使得它不是一个非常可行的选项。

    将写函数名称列表添加到pgpool配置中的black_function_列表参数。

    将写函数名称列表添加到pgpool配置中的black_function_列表参数。

    救了我的命谢谢你这救了我的命谢谢。
    /*NO LOAD BALANCE*/ SELECT my_writing_function();