从 mysql 迁移后使用 postgres 数据库进行续集不工作
sequelize with postgres database not working after migration from mysql
我在 sequelize 中将 MySQL 数据库更改为 postgreSQL。但是迁移后,我对 Table 或模型中的大写和小写首字母有疑问...
在我的 MySQL 版本正常工作之前,但在迁移之后我收到错误消息:
500 SequelizeDatabaseError: relation "Users" does not exist
我的用户模型:
module.exports = function(sequelize, Sequelize) {
var User = sequelize.define("User", {
// profile
userlevel: Sequelize.STRING,
restaurant: Sequelize.STRING,
access: Sequelize.STRING,
optionsid: Sequelize.STRING,
email: Sequelize.STRING,
name: Sequelize.STRING,
gender: Sequelize.STRING,
location: Sequelize.STRING,
website: Sequelize.STRING,
picture: Sequelize.STRING,
// Oauth
password: {
type: Sequelize.STRING,
set: function(v) {
var salt = bcrypt.genSaltSync(5);
var password = bcrypt.hashSync(v, salt);
return this.setDataValue('password', password);
}
},
.....
迁移文件:
"use strict";
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable("users", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
userlevel: {
type: DataTypes.STRING,
defaultValue: '5'
},
restaurant: {
type: DataTypes.STRING,
defaultValue: ''
},
access: {
type: DataTypes.STRING,
defaultValue: '1'
},
optionsid: {
type: DataTypes.STRING,
defaultValue: ''
},
email: {
type: DataTypes.STRING,
allowNull: false
},
name: {
type: DataTypes.STRING,
defaultValue: ''
},
gender: {
type: DataTypes.STRING,
defaultValue: ''
},
location: {
type: DataTypes.STRING,
defaultValue: ''
},
website: {
type: DataTypes.STRING,
defaultValue: ''
},
picture: {
type: DataTypes.STRING,
defaultValue: ''
},
password: {
type: DataTypes.STRING
},
facebook: {
type: DataTypes.STRING
},
twitter: {
type: DataTypes.STRING
},
google: {
type: DataTypes.STRING
},
tokens: {
type: DataTypes.STRING
},
resetPasswordToken: {
type: DataTypes.STRING
},
resetPasswordExpires: {
type: DataTypes.DATE
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
}
}).done(done);
},
down: function(migration, DataTypes, done) {
migration.dropTable("users").done(done);
}
};
如果我将 postgreSQL 中 table 的首字母更改为大写,一切正常...
PostgreSQL 将普通标识符的名称折叠为小写。所以 users
、Users
和 USERS
都解析为标识符 users
。
定界标识符不同。 (定界标识符用双引号括起来。)标识符 "users"
、"Users"
和 "USERS"
是三个不同的标识符。
您的迁移创建了 table "users"
。 Sequelize 正在寻找 table "Users"
。 (定界标识符——两个不同的 table。)
您可能应该将迁移中的标识符更改为 "Users"。还有其他方法,但这是阻力最小的方法。如果这已经在生产中,您最好编写另一个将 "users"
重命名为 "Users"
.
的迁移
我在 sequelize 中将 MySQL 数据库更改为 postgreSQL。但是迁移后,我对 Table 或模型中的大写和小写首字母有疑问...
在我的 MySQL 版本正常工作之前,但在迁移之后我收到错误消息:
500 SequelizeDatabaseError: relation "Users" does not exist
我的用户模型:
module.exports = function(sequelize, Sequelize) {
var User = sequelize.define("User", {
// profile
userlevel: Sequelize.STRING,
restaurant: Sequelize.STRING,
access: Sequelize.STRING,
optionsid: Sequelize.STRING,
email: Sequelize.STRING,
name: Sequelize.STRING,
gender: Sequelize.STRING,
location: Sequelize.STRING,
website: Sequelize.STRING,
picture: Sequelize.STRING,
// Oauth
password: {
type: Sequelize.STRING,
set: function(v) {
var salt = bcrypt.genSaltSync(5);
var password = bcrypt.hashSync(v, salt);
return this.setDataValue('password', password);
}
},
.....
迁移文件:
"use strict";
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable("users", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
userlevel: {
type: DataTypes.STRING,
defaultValue: '5'
},
restaurant: {
type: DataTypes.STRING,
defaultValue: ''
},
access: {
type: DataTypes.STRING,
defaultValue: '1'
},
optionsid: {
type: DataTypes.STRING,
defaultValue: ''
},
email: {
type: DataTypes.STRING,
allowNull: false
},
name: {
type: DataTypes.STRING,
defaultValue: ''
},
gender: {
type: DataTypes.STRING,
defaultValue: ''
},
location: {
type: DataTypes.STRING,
defaultValue: ''
},
website: {
type: DataTypes.STRING,
defaultValue: ''
},
picture: {
type: DataTypes.STRING,
defaultValue: ''
},
password: {
type: DataTypes.STRING
},
facebook: {
type: DataTypes.STRING
},
twitter: {
type: DataTypes.STRING
},
google: {
type: DataTypes.STRING
},
tokens: {
type: DataTypes.STRING
},
resetPasswordToken: {
type: DataTypes.STRING
},
resetPasswordExpires: {
type: DataTypes.DATE
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
}
}).done(done);
},
down: function(migration, DataTypes, done) {
migration.dropTable("users").done(done);
}
};
如果我将 postgreSQL 中 table 的首字母更改为大写,一切正常...
PostgreSQL 将普通标识符的名称折叠为小写。所以 users
、Users
和 USERS
都解析为标识符 users
。
定界标识符不同。 (定界标识符用双引号括起来。)标识符 "users"
、"Users"
和 "USERS"
是三个不同的标识符。
您的迁移创建了 table "users"
。 Sequelize 正在寻找 table "Users"
。 (定界标识符——两个不同的 table。)
您可能应该将迁移中的标识符更改为 "Users"。还有其他方法,但这是阻力最小的方法。如果这已经在生产中,您最好编写另一个将 "users"
重命名为 "Users"
.