postgresql - 如何将新项目附加到 PostgreSQL 中的数组类型列中

标签 postgresql postgresql-9.2

我在我的应用程序中使用 PostgreSQL,

任务会是这样的

有些用户在使用我的应用,我需要根据他们的事件为每个用户维护通知,以便为每个用户收到大量通知。

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

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

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

那么有没有一种方法来执行 UPDATE 查询,只添加一个新元素或更改 PostgreSQL 中 array/json 对象类型中的现有元素/节点?

最佳答案

要将项目附加到 PostgreSQL 中的数组,您可以使用 || 运算符或 array_append 函数。

与||运算符(operator)

UPDATE table SET array_field = array_field || '{"new item"}' WHERE ...

带有array_append函数

UPDATE table SET array_field = array_append(array_field,'new item') WHERE ...

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

我不知道如何使用 JSON 数据类型。

关于postgresql - 如何将新项目附加到 PostgreSQL 中的数组类型列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29319801/

相关文章:

postgresql - 删除 Windows 7 上的 postgres 用户帐户

postgresql - 带有空参数的 JPA NamedQuery

python - Postgresql 是否可以对二进制数据执行立方体功能?

sql - 如何使用每个字段的最大时间戳交叉连接同一个表?

java - Postgresql 与 Java 中的数据库连接失败

sql - 在 Postgresql 中合并 2 条记录(变量)以返回它们

java - 为什么我的查询会死锁?

postgresql - 使用可写外部表卸载数据

PostgreSQL - 查询以确定当前正在清理哪些表?

postgresql - 在 PostgreSQL 中存储 IPv6 范围