如何获取 ARRAY 列的维数?

b0x*_*d1n 1 arrays postgresql information-schema

我正在开发一个项目,该项目直接从数据库收集有关架构的信息。我可以data_type使用 获取该列的information_schema.columns,它会告诉我它ARRAY是否是一个。我还可以通过查询来获取 的基础类型(integerbytea),如下所述:ARRAYinformation_schema.element_types

https://www.postgresql.org/docs/9.1/static/infoschema-element-types.html

我的问题是我还需要知道数组有多少维,是否是integer[],或者integer[][]例如。有谁知道有什么方法可以做到这一点?Google 在这里并没有提供太多帮助,希望更熟悉 Postgres 规范的人可以引导我走向正确的方向。

Erw*_*ter 6

首先,数组的维数并不反映在 Postgres 的数据类型中。语法integer[][]是可以容忍的,但它实际上只是integer[]内部的。
请阅读此处的手册。

这意味着同一数组类型(同一表列)内的维度可以不同。

要获取特定数组的实际尺寸:

SELECT array_dims(my_arr);  -- [1:2][1:3]
Run Code Online (Sandbox Code Playgroud)

或者只获取维数:

SELECT array_ndims(my_arr);  -- 2
Run Code Online (Sandbox Code Playgroud)

还有更多的数组函数可以满足类似的需求。请参阅手册中的数组函数表。

有关的:

如果需要在列中强制执行特定维度,请添加CHECK约束。要强制使用二维数组:

ALTER TABLE tbl ADD CONSTRAINT tbl_arr_col_must_have_2_dims
CHECK (array_ndims(arr_col) = 2);
Run Code Online (Sandbox Code Playgroud)