对于9.5以下的版本,请参见此问题

我使用以下方法在PostgreSQL中创建了一个表:

CREATE TEMP TABLE jsontesting
AS
  SELECT id, jsondata::jsonb FROM ( VALUES
    (1, '["abra","value","mango", "apple", "sample"]'),
    (2, '["japan","china","india", "russia", "australia"]'),
    (3, '["must", "match"]'),
    (4, '["abra","value","true", "apple", "sample"]'),
    (5, '["abra","false","mango", "apple", "sample"]'),
    (6, '["string","value","mango", "apple", "sample"]'),
    (7, '["must", "watch"]')
  ) AS t(id,jsondata);

现在我想要的是

  • add类似于append_to_json_array的东西接收实际的jsondata,它是一个json数组,以及我必须添加到该jsondata数组中的newString,这个函数应该返回更新后的jsonarray.

    UPDATE jsontesting
    SET jsondata=append_to_json_array(jsondata, 'newString')
    WHERE id = 7;
    
  • remove json数据数组中的一个值,一个用于删除该值的函数.

我试图搜索PostgreSQL的文档,但在那里什么也没找到.

推荐答案

要添加值,请使用JSON数组append opperator(||)

UPDATE jsontesting
SET jsondata = jsondata || '["newString"]'::jsonb
WHERE id = 7;

删除该值如下所示

UPDATE jsontesting
SET jsondata = jsondata - "newString"
WHERE id = 7; 

连接到嵌套字段如下所示

UPDATE jsontesting
SET jsondata = jsonb_set(
  jsondata::jsonb,
  array['nestedfield'],
  (jsondata->'nestedfield')::jsonb || '["newString"]'::jsonb) 
WHERE id = 7;

Postgresql相关问答推荐

我需要一个变量来引用上周的星期五

让Docker Compose Container等待容器PostgreSQL并恢复

使用 pgx 扫描范围类型

对 Postgres 进行身份验证时如何使用自定义密码哈希算法?

PostgreSQL - 改变数字的精度?

在 CentOS 上安装 psycopg2 时遇到问题

PostgreSQL INSERT 插入一个枚举数组

LAG 函数和 GROUP BY

在 PostgreSQL 中表示Sparse稀疏数据

从 PostgreSQL 中的时间戳获取日期

Postgis 中 2 点之间的距离,单位为 4326 米

在 Spring Boot 应用程序中禁用表重新创建

Rails:PG :: InsufficientPrivilege:错误:permission denied for relation schema_migrations

在 MAC OS X 10.6 for PostgreSQL 上设置 SHMMAX 等值

在 postgres 中创建超级用户

错误:ERROR: table name specified more than once

使用 Hibernate 注释映射 PostgreSQL 串行类型

在 Windows 7 上更改/重置 postgresql 用户密码

删除空行

如何在创建数据库时安装 Postgres 扩展?