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

使用go migrate执行PostgreSQL迁移遇语法错误求助

PostgreSQL迁移语法错误问题解答

1. 语法错误的原因

user是PostgreSQL的保留关键字,直接将它作为表名使用会触发语法解析错误。PostgreSQL会把保留关键字当作SQL命令的一部分处理,而非用户自定义的标识符。

修正后的SQL有两种可行方式:

方式一:修改表名(推荐)

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE users 
(
    id UUID DEFAULT uuid_generate_v4 () PRIMARY KEY,
    email TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    created_at TIMESTAMP without time zone NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMP without time zone
);

方式二:用双引号包裹保留关键字

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE "user" 
(
    id UUID DEFAULT uuid_generate_v4 () PRIMARY KEY,
    email TEXT NOT NULL UNIQUE,
    password TEXT NOT NULL,
    created_at TIMESTAMP without time zone NOT NULL DEFAULT NOW(),
    updated_at TIMESTAMP without time zone
);

注意:用双引号包裹后,标识符会区分大小写,后续查询该表时必须同样用双引号引用。

2. 同类问题的调试方法

  • 核对PostgreSQL保留关键字:PostgreSQL有明确的保留、非保留关键字列表,编写SQL前确认自定义标识符不在保留关键字范围内
  • 用psql直接测试:将迁移文件中的SQL片段复制到psql命令行执行,能得到比在线工具更精准的错误定位和提示
  • 开启数据库详细日志:修改PostgreSQL配置文件postgresql.conf,设置log_statement = 'all',执行迁移后查看日志,获取完整的错误上下文
  • 优先避免关键字命名:尽量使用语义清晰且非关键字的名称,比如用users代替user,减少不必要的语法冲突
  • 拆分测试SQL片段:如果迁移文件内容较多,拆分语句逐个执行,快速定位出错的具体代码行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:22:38