Ruby on Rails - Postgres:数组值必须以“{”或维度信息开头

时间:2015-12-08 16:16:13

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

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

我设置了postgres和超级用户。

当我用户rake db:setup一切顺利到达应该为db播种的部分时。

出现此错误:

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

我的数据库包含数组,这在sqlite上工作正常,即使在迁移和播种到新设置时也是如此。

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

感谢任何帮助。

版本:

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

2 个答案:

答案 0 :(得分:10)

在插入数据库之前,数组似乎被序列化为YAML(---表示YAML文档的开头)。

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

答案 1 :(得分:0)

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

CREATE PROCEDURE