【问题标题】:Ruby on Rails - Postgres: Array value must start with "{" or dimension informationRuby on Rails - Postgres:数组值必须以“{”或维度信息开头
【发布时间】:2016-03-13 15:51:29
【问题描述】:

对于我的 Rails 应用程序,我在生产环境中从 sqlite3 切换到 Postgres。我想将数据从 sqlite db 带到 postgres db。

我设置了 postgres 和超级用户。

当我使用 rake db:setup 时,一切顺利到应该为数据库播种的部分。

出现这个错误:

rake aborted!
ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR:  malformed array literal: "---
- ''
"
DETAIL:  Array value must start with "{" or dimension information.

我的数据库包含数组,这在 sqlite 上运行良好,即使在迁移和播种到新设置时也是如此。

我猜这个错误是由与 postgres db 不兼容的语法引起的。如果是这种情况,我可以创建一个包含正确语法的 seed.rb 文件吗?

感谢任何帮助。

版本:

Rails 4.1.8
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

【问题讨论】:

    标签: ruby-on-rails ruby database postgresql sqlite


    【解决方案1】:

    看起来数组在插入数据库之前被序列化为 YAML(--- 表示 YAML 文档的开始)。

    我猜你的模型有例如serialize :some_field, Array,这是在 SQLite 中存储数组所必需的,但如果您现在使用本机 Postgres 数组列类型,则会导致问题。如果您的模型中有这样的线,请尝试将其删除。

    【讨论】:

    • 投反对票的人:请发表评论,解释投反对票的原因。如果我的答案是想要的,我很乐意尝试并改进它。
    • 这对我帮助很大,感谢 Jordan!我希望这可以弥补对您的解决方案投反对票的人。
    【解决方案2】:

    Jordan 的回答绝对正确,但在我的情况下,我最终添加了一个迁移以将数组存储为 YAML 格式。

    change_column :table, :column, :text, default: [].to_yaml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多