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

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" 
    },
  }
};

额外注意事项

  1. 布尔值映射:PostgreSQL用boolean类型表示真假,你的业务代码里用0/1的逻辑完全不用改,Sails的ORM会自动处理0→false、1→true的映射。
  2. 适配器版本:确保sails-postgresql是最新版本,执行npm update sails-postgresql更新,避免旧版本的兼容问题。
  3. 迁移模式:你当前用的是drop模式,会清空数据库重建,若已有数据建议改成alter模式更安全。
  4. 全局检查:别忘了检查其他模型是否也用了MySQL的columnType,全部替换后再启动项目。

最后验证

修改完成后,重新执行sails lift,应该就能正常启动了。如果还有问题,可以检查PostgreSQL数据库是否存在、连接用户的权限是否足够(虽然你说试过,但再确认一次也没坏处)。

内容的提问来源于stack exchange,提问作者Sandeep PC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:50:48