Rails 5.2升级至6.1后创建ar_internal_metadata出现语法错误
Rails 6.1 + Ruby 3.3.5 初始迁移
ar_internal_metadata表时PostgreSQL语法错误原因 核心问题
问题出在Rails 6.1生成的时间戳字段语法与你使用的低版本PostgreSQL不兼容。
具体分析
- Rails 6.1开始,默认会为
created_at、updated_at这类时间戳字段指定微秒级精度(6位),生成的ar_internal_metadata表创建SQL包含:created_at timestamp with time zone(6) NOT NULL, updated_at timestamp with time zone(6) NOT NULL - PostgreSQL 9.6及更早版本不支持在
timestamp with time zone后添加精度括号的语法,执行时直接触发语法异常。 - 而Rails 5.2生成的时间戳字段不带精度声明,语法兼容低版本PostgreSQL,所以之前用Rails 5.2创建过该表后,升级到6.1不会再触发这个错误。
额外验证点
- 确认你的PostgreSQL版本:如果是9.6或更早,完全匹配这个问题场景。
- Ruby 3.3.5不是直接诱因,只是升级组合中的一部分,核心矛盾在Rails版本对PostgreSQL语法的适配变化上。
内容的提问来源于stack exchange,提问作者xSlok
相关产品推荐
相关产品推荐

