180 条记录
15 私有链接
15 私有链接
在 PostgreSQL 中,默认情况下,所有表都被创建在 public 模式(schema)下。不过,你可以指定一个不同的模式,或者在创建模型时选择使用自定义的模式。你也可以通过 Sequelize 的 schema 方法在指定的模式下创建表。
- 新建一个模式
首先,你需要确保在 PostgreSQL 数据库中创建了自定义模式。你可以通过以下 SQL 命令新建一个模式(假设模式名为 custom_schema):
CREATE SCHEMA custom_schema;、
- 使用 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);
});
- 在 PostgreSQL 中创建并授权模式
如果你使用了自定义模式,你需要确保 PostgreSQL 中创建了这个模式,并且适当的权限被授予给用户。例如,创建一个新的模式并授权 postgres 用户访问:
CREATE SCHEMA custom_schema;
GRANT ALL PRIVILEGES ON SCHEMA custom_schema TO postgres;
总结
你可以通过 define 选项全局指定默认的模式。
也可以在模型定义时通过 schema 方法为每个模型指定自定义的模式。
确保自定义模式已经在 PostgreSQL 中创建,并且适当的权限被授予使用该模式的用户。