Node.js sequelize节点js中的options.pool.validate

Node.js sequelize节点js中的options.pool.validate,node.js,sequelize.js,failover,Node.js,Sequelize.js,Failover,Postgres序列名称-post_seq 选择查询以获取下一个序列-选择nextval(post\u seq) 使用sequelize v5.x 池配置- { max: 10, min: 1, acquire: 30000, idle: 10000, validate: async pgClient => { const result = await pgClient.query('SELECT pg_is_in

Postgres序列名称-
post_seq

选择查询以获取下一个序列-
选择nextval(post\u seq)

使用sequelize v5.x

池配置-

{
      max: 10,
      min: 1,
      acquire: 30000,
      idle: 10000,
      validate: async pgClient => {
        const result = await pgClient.query('SELECT pg_is_in_recovery()');
        const isReadOnly = result.rows[0].pg_is_in_recovery;
        console.log(isReadOnly, 'isReadOnly:src/utils/db.js')
        return !isReadOnly;
      }
    }
期望值-

对应用程序中运行的所有查询(包括上面的SELECT查询)调用
options.pool.validate
,以获取下一个序列id

发生了什么事-

仅对非SELECT查询调用
options.pool.validate

我假设这是sequelize的默认行为。如果是这样的话,还有什么方法可以强制SELECT查询只使用可写连接?这种预期的原因是,在AWS RDS故障切换期间,读卡器连接不能用于运行上述选择查询,因为
nextval()
不仅仅是一个选择查询。如果有方法为此选择查询调用options.pool.validate,sequelize将在执行此
nextval()
查询之前放弃该连接,因为使用了池配置。到目前为止,我在服务器日志中得到的错误如下-

SequelizeDatabaseError: cannot execute nextval() in a read-only transaction\n
还有几点需要注意:

  • 我正在连接到nodejs应用程序中的cluster writer端点
  • 我正在使用
    “SELECT pg_is_in_recovery()”
    查询来检查所使用的连接是否为只读连接。如果它是只读的,则sequelize将放弃该连接
  • 我尝试在池配置中使用
    useMaster:true
    ,但在故障切换场景中似乎没有帮助。这可能主要在复制而不是灾难恢复设置的情况下有用