首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails PostgreSql存储多维数组

Rails PostgreSql存储多维数组
EN

Stack Overflow用户
提问于 2019-05-20 17:25:13
回答 1查看 270关注 0票数 1

是否可以在列中存储多维数组。

我尝试了以下操作,并从创建记录列中收到了下面的错误。

migration_file.rb

代码语言:javascript
复制
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:格式错误数组文字:“{}”

EN

Stack Overflow用户

回答已采纳

发布于 2019-05-20 21:35:59

来自数组上的文档(着重号是添加的):

CREATE的语法允许指定数组的确切大小,例如: 创建桌面(正方形integer3 ); 但是,当前实现忽略任何提供的数组大小限制,即行为与未指定长度的数组相同。 当前实现也不强制声明的维度数。特定元素类型的数组都被认为是相同类型的,而不管大小或维度数如何。因此,在CREATE TABLE中声明数组大小或维数只是文档;它不影响运行时行为。

因此,实际上没有多维数组类型。要解决问题,只需将默认值从{{}}更改为{}即可。

这意味着varchar[][]varchar[]的类型相同。

代码语言:javascript
复制
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)

不过,您仍然能够存储多维数据。

一维数组和二维数组是不一样的:

代码语言:javascript
复制
db=# select '{{foo}}'::varchar[] = '{foo}'::varchar[];
 ?column?
----------
 f
(1 row)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56225580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档