You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Sequelize默认useMaster为true,仅指定表启用只读复制?

Sequelize主从复制默认读主节点配置方案

问题背景

团队希望为部分数据表设置只读复制(读从库),但不想修改现有默认配置,当前已完成Sequelize主从复制基础配置,想实现数据表默认读取主节点,询问是否可以将Sequelize默认useMaster设为true。

现有配置代码:

const Sequelize = require('sequelize'); 
const options = {
  username: 'DATABASE_USERNAME',
  password: 'DATABASE_PASSWORD',
  database: 'DATABASE_NAME',
  port: 10,
  dialect: 'postgres',
  pool: {
    max: 10,
    min: 0,
    idle: 10000
  },
  dialectOptions: {},
  replication:{
     read:[{host:"read-host"}], // required
     write:{host:"write-host"} // required
  },
  socketTimeout: 120000
}
const sequelize = new Sequelize(options.database, options.username, options.password, options);

解决方案

  1. 可以将默认useMaster设为true
    在Sequelize初始化配置中添加useMaster: true参数,即可让所有查询默认走主节点。修改后的配置如下:
const Sequelize = require('sequelize'); 
const options = {
  username: 'DATABASE_USERNAME',
  password: 'DATABASE_PASSWORD',
  database: 'DATABASE_NAME',
  port: 10,
  dialect: 'postgres',
  pool: {
    max: 10,
    min: 0,
    idle: 10000
  },
  dialectOptions: {},
  replication:{
     read:[{host:"read-host"}], // required
     write:{host:"write-host"} // required
  },
  useMaster: true, // 新增:默认读主节点
  socketTimeout: 120000
}
const sequelize = new Sequelize(options.database, options.username, options.password, options);
  1. 为部分数据表单独设置只读(读从库)
    如果需要指定某张表的查询走从库,无需修改全局配置,只需在该表的查询语句中显式添加useMaster: false参数:
// 示例:查询User表时强制读从库
User.findAll({
  where: { status: 1 },
  useMaster: false
});

也可以在模型定义阶段,为特定模型设置默认读从库:

const User = sequelize.define('User', {
  // 模型字段定义
}, {
  defaultScope: {
    useMaster: false // 该模型所有查询默认读从库
  }
});

内容的提问来源于stack exchange,提问作者栾学超

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:28