1

我有一列 Int Array。我想在表中添加另一列,该列始终显示该数组中该行的数字元素。它应该自动更新这个值。有没有办法将函数嵌入为默认值?如果是这样,这个函数如何知道在哪里选择它的参数(int 数组列/行号)。

4

1 回答 1

3

在规范化表中,您不会将此功能相关的冗余信息作为单独的列包含在内。

动态计算它既简单又快速:

SELECT array_dims ('{1,2,3}'::int[]);

或者:

SELECT array_length('{1,2,3}'::int[], 1);

array_length()已在 PostgreSQL 8.4 中引入。也许是升级的动力?8.3 即将停止服务。

使用 Postgres 8.3,您可以使用:

SELECT array_upper('{1,2,3}'::int[], 1);

但这很差,因为如果显式输入,数组索引可以以任何数字开头。array_upper()不会告诉实际长度,你必须先减去array_lower()。还要注意,在 PostgreSQL 中,数组总是可以包含多个维度,而不管声明了多少维度。我在这里引用手册

当前的实现也不强制声明的维数。无论大小或维数如何,特定元素类型的数组都被认为是同一类型。因此,在 CREATE TABLE 中声明数组大小或维数只是文档;它不会影响运行时行为。

(对于 8.3 和 9.1 都是如此。)这就是我array_dims()首先提到的原因,以提供完整的图片。

手册中有关数组函数的详细信息。


您可能希望创建一个视图以包含该功能相关的列:

CREATE VIEW v_tbl AS
SELECT arr_col, array_length(arr_col, 1) AS arr_len
FROM   tbl;
于 2012-06-28T16:39:47.913 回答