是否可以在列中存储多维数组。
我尝试了以下操作,并从创建记录列中收到了下面的错误。
migration_file.rb
create_table :balance_sheets_details do |t|
t.string :headers, array: true, default: []
t.string :records, array: true, default: [[]]
t.timestamps
end上升误差
PG::InvalidTextRepresentation: ERROR:格式错误数组文字:“{}”
发布于 2019-05-20 21:35:59
来自数组上的文档(着重号是添加的):
CREATE的语法允许指定数组的确切大小,例如: 创建桌面(正方形integer3 ); 但是,当前实现忽略任何提供的数组大小限制,即行为与未指定长度的数组相同。 当前实现也不强制声明的维度数。特定元素类型的数组都被认为是相同类型的,而不管大小或维度数如何。因此,在
CREATE TABLE中声明数组大小或维数只是文档;它不影响运行时行为。
因此,实际上没有多维数组类型。要解决问题,只需将默认值从{{}}更改为{}即可。
这意味着varchar[][]与varchar[]的类型相同。
db=# select pg_typeof(a), pg_typeof(b) from (values ('{{hello},{world}}'::varchar[][], '{foo}'::varchar[])) x(a, b);
pg_typeof | pg_typeof
---------------------+---------------------
character varying[] | character varying[]
(1 row)不过,您仍然能够存储多维数据。
一维数组和二维数组是不一样的:
db=# select '{{foo}}'::varchar[] = '{foo}'::varchar[];
?column?
----------
f
(1 row)https://stackoverflow.com/questions/56225580
复制相似问题