如何将新项追加到PostgreSQL中的数组类型列中

Cod*_*ows 12 html php mysql postgresql postgresql-9.2

我使用PostgreSQL作为我的应用程序,

任务将是这样的

有些用户使用我的应用程序,我需要根据他们的活动维护每个用户的通知,因此我会收到大量的每个用户的通知.

所以一般来说我们只是将所有通知放在一个单独的表中,我们用用户ID映射,所以我们可以只获取它们,但现在我想使用json/array数据类型,所以我可以把整个通知设置为array/json进入每个用户行的单元格.

哪一个更好,存储json或数组?(我在服务器端使用PHP)

如果我们选择两者中的任何一个,假设我们有10个通知,并且我得到了第11个,我们如何在单个执行中将新项目附加到array/json对象中(可能是UPDATE语句)?我不想像基本方式一样选择行,获取现有的数组/ json最后添加新项目(使用PHP处理)并更新它 - 这里需要两次执行,其中可能会发生另一次更改并带来数据

那么有没有办法做UPDATE查询只是添加一个新元素或改变PostgreSQL中array/json obejct类型中的现有元素/节点?

小智 31

要将项目附加到PostgreSQL中的数组,您可以使用|| operator或array_append函数.

随着|| 操作者

UPDATE table SET array_field = array_field || 'new item' WHERE ...
Run Code Online (Sandbox Code Playgroud)

使用array_append函数

UPDATE table SET array_field = array_append(array_field,'new item') WHERE ...
Run Code Online (Sandbox Code Playgroud)

您也可以访问此页面的数组,http://www.postgresql.org/docs/current/interactive/functions-array.html

我不知道如何使用json数据类型.

  • 未来的读者请注意:上面的 @sscarduzio 解决方案适用(对于 json/jsonb),但需要注意的是,有问题的列必须是 JSON/JSONB 数据类型。如果列的数据类型已设置为数组(例如 int[] 或 text[]),则它将不起作用。因此,将新列添加为 json(b) 类型,并使用此答案和上面的评论中概述的命令。 (3认同)
  • 这适用于jsonb(我相信与json类似)`update table set array_field = array_field || '{“ a”:“ b”}':: jsonb` (2认同)