每天 Shaarli

一天内的所有链接,汇聚在一个页面上。

September 14, 2024

Note: sequelize使用不同模式

在 PostgreSQL 中,默认情况下,所有表都被创建在 public 模式(schema)下。不过,你可以指定一个不同的模式,或者在创建模型时选择使用自定义的模式。你也可以通过 Sequelize 的 schema 方法在指定的模式下创建表。

  1. 新建一个模式
    首先,你需要确保在 PostgreSQL 数据库中创建了自定义模式。你可以通过以下 SQL 命令新建一个模式(假设模式名为 custom_schema):
CREATE SCHEMA custom_schema;、
  1. 使用 Sequelize 配置自定义模式
    在 Sequelize 中,你可以通过 schema 方法为模型指定自定义的模式。你可以全局指定模式,或者为每个模型单独指定模式。

2.1 为所有模型设置默认模式
如果你希望所有模型都使用某个自定义的模式,可以在 define 配置中指定 schema 选项:

const { Sequelize } = require('sequelize');

// 初始化 Sequelize,连接到 PostgreSQL 数据库
const sequelize = new Sequelize('cadre_evaluation', 'postgres', '123456', {
    host: 'localhost', // PostgreSQL 数据库所在的主机
    dialect: 'postgres', // 使用 PostgreSQL
    port: 5432, // 默认 PostgreSQL 端口号
    logging: false, // 禁用日志
    define: {
        schema: 'custom_schema' // 这里指定全局模式
    }
});

// 测试连接
sequelize.authenticate()
    .then(() => {
        console.log('已成功建立连接。');
        sequelize.sync({ force: false }) // force: true 将强制重建表
            .then(() => {
                console.log('数据库和表已创建!');
            });
    })
    .catch(err => {
        console.error('无法连接到数据库:', err);
    });

module.exports = sequelize;

这样,所有模型在被创建时都会使用 custom_schema 模式,而不是默认的 public 模式。

2.2 为特定模型设置自定义模式
如果你只想为某些模型指定模式,可以在定义模型时使用 schema 方法:

const User = sequelize.define('User', {
    // 定义字段
    firstName: {
        type: Sequelize.STRING,
        allowNull: false
    },
    lastName: {
        type: Sequelize.STRING
    },
    email: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true
    }
});

// 为该模型使用特定的 schema
User.sync({ schema: 'custom_schema' })
    .then(() => {
        console.log('User 表已在 custom_schema 模式下创建!');
    })
    .catch(err => {
        console.error('无法创建表:', err);
    });
  1. 在 PostgreSQL 中创建并授权模式
    如果你使用了自定义模式,你需要确保 PostgreSQL 中创建了这个模式,并且适当的权限被授予给用户。例如,创建一个新的模式并授权 postgres 用户访问:
CREATE SCHEMA custom_schema;
GRANT ALL PRIVILEGES ON SCHEMA custom_schema TO postgres;

总结
你可以通过 define 选项全局指定默认的模式。
也可以在模型定义时通过 schema 方法为每个模型指定自定义的模式。
确保自定义模式已经在 PostgreSQL 中创建,并且适当的权限被授予使用该模式的用户。