Sails-Postgres项目启动失败咨询(从MySQL迁移适配)
解决Sails项目从MySQL迁移到PostgreSQL启动失败的问题
我之前帮同行处理过几乎一模一样的问题,你的报错根源很明确——模型里硬写了MySQL专属的字段类型和语法,PostgreSQL无法识别这些配置,导致自动迁移生成SQL时出现语法错误,也就是你看到的syntax error at or near "ON"。
具体问题点拆解
你在roles模型里用的这些columnType都是MySQL独有的:
utf8_unicode_ci排序规则:PostgreSQL的排序规则语法和MySQL不同,且通常不需要在字段级别指定(数据库级配置即可)int(11)、tinyint(1):这些是MySQL的整数类型写法,PostgreSQL用integer、boolean对应
修复步骤
把模型中的MySQL专属配置替换为PostgreSQL兼容的版本,修改后的roles模型代码如下:
module.exports = { tableName: 'roles', attributes: { name: { type: "string", required: true, columnType: "varchar(255) NOT NULL" }, company_id: { type: "number", required: true, columnType: "integer NOT NULL" }, mobile_user: { type: "number", required: false, defaultsTo: 0, columnType: "boolean NOT NULL DEFAULT false" }, enforcement: { type: "number", required: false, defaultsTo: 0, columnType: "boolean NOT NULL DEFAULT false" }, } };
额外注意事项
- 布尔值映射:PostgreSQL用
boolean类型表示真假,你的业务代码里用0/1的逻辑完全不用改,Sails的ORM会自动处理0→false、1→true的映射。 - 适配器版本:确保
sails-postgresql是最新版本,执行npm update sails-postgresql更新,避免旧版本的兼容问题。 - 迁移模式:你当前用的是
drop模式,会清空数据库重建,若已有数据建议改成alter模式更安全。 - 全局检查:别忘了检查其他模型是否也用了MySQL的
columnType,全部替换后再启动项目。
最后验证
修改完成后,重新执行sails lift,应该就能正常启动了。如果还有问题,可以检查PostgreSQL数据库是否存在、连接用户的权限是否足够(虽然你说试过,但再确认一次也没坏处)。
内容的提问来源于stack exchange,提问作者Sandeep PC
相关产品推荐
相关产品推荐

