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