【问题标题】:Postgres Array Append & Array Length for 'Array Push'“数组推送”的 Postgres 数组追加和数组长度
【发布时间】:2020-07-27 14:01:40
【问题描述】:

在未提供数组大小的情况下,向数组添加元素的最佳方法是什么?

对于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;

【问题讨论】:

  • 所以您想将'element' 附加到table.array
  • 是的.. 将“元素”附加到table.array column 中的array

标签: arrays postgresql


【解决方案1】:

最简单的事情是:

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 引起我的注意。

【讨论】:

  • 尽我所能,我无法用 || 获得第二个示例工作,即使上面的例子工作正常
  • DETAIL:数组值必须以“{”或维度信息开头。
  • @ak5 你确定左边的操作数是一个数组吗?
  • 是的,我很确定:/ update users set roles = roles || 'lol' where id = 1; no bueno update users set roles = array_append(roles, 'lol') where id = 1; no problemo
  • @ak5 似乎对'element' 是什么类型感到困惑,roles || 'cool_pipes'::varchar 有效,但没有演员表 PostgreSQL 不知道您是在尝试array || array 还是array || element。我想知道过去八年是否发生了变化,我将澄清答案和SQL。感谢您为此烦恼我。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2015-08-22
相关资源
最近更新 更多