What is the best way to add an element to an array when the size of the array is not provided?

有了array_append,这就是我能想到的:

UPDATE table SET array = array_append((SELECT array FROM table WHERE ...), 'element') WHERE ...;

有了array_length,这就是我能想到的:

UPDATE table SET array[array_length((SELECT array FROM table WHERE ...), 1)+1] = element;

推荐答案

最简单的是:

update table
set array = array_append(array, 'element')
where ...

或者使用|| operator:

update table
set array = array || 'element'
where ...

这两个数字都相当于更常见的数字set n = n + 11.根据所涉及的类型,您可能需要通过包含类型转换来消除对所指||运算符的歧义:

update table
set array = array || 'element'::text
where ...

所以PostgreSQL知道你想要||array || element版本,而不是array || array版本.感谢ak5让我注意到这一点.

Postgresql相关问答推荐

优化PostgreSQL查询以将用户插入数据库

哪种数据类型是除法的结果?

在PostGreSQL中获取最近日期的项目

将整数(以毫秒为单位的epoch时间)转换为PrimitiveDateTime

Gorm 中的更新将created_at、updated_at 作为默认时间

在Power BI和Excel中将日期格式化为正确格式

IF 块中的 CREATE FUNCTION 语句抛出错误,同时运行它自己的作品

转到 time.Time to postgresql timestamptz 无法用 time.Now() 保存

TimescaleDB 连续聚合:如何存储连续聚合结果

PostgreSQL 输入结束时的语法错误

如何从 postgresql Select 查询中的 age() 函数中仅获取年份

如何向文本字段添加长度约束

获取带有时区偏移的日期

SQLAlchemy 和多个进程的连接问题

为什么 PostgreSQL 数组访问在 C 中比在 PL/pgSQL 中快得多?

在 PostgreSQL 中将列数据类型从 Text 更改为 Integer

Postgresql varchar 是否使用 unicode 字符长度或 ASCII 字符长度计算?

防止 PostgreSQL 中的递归触发器

如何从我的 postgresql 查询中获取最小值、中值和最大值?

如何更改 PostgreSQL 中的 REFERENCES?