PostgreSQL不会保存空数组

时间:2019-03-18 20:11:57

标签: ruby-on-rails postgresql

user模型的goal字段是一个数组:

t.integer "goal", default: [], array: true

目标的有效条目为[[],[],[]]。如果我愿意

Match.create(goal: [[],[],[]])

我得到一个例外:

ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR:  malformed array literal: "{{},{},{}}"
DETAIL:  Unexpected "}" character.

我知道可以通过将其另存为goal: []来解决此问题,但是我丢失了有关子数组数量的信息。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您已从尝试将数字数组存储到固定长度的数组,其中包括空值甚至子数组。因此,t.integer字段是不好的。您需要使用t.jsonbt.json字段。

请参见Postgres docs on JSON datatypes