在 postgresql、选项数组或对象中插入 jsonb 数据,有效方式

Posted

技术标签:

【中文标题】在 postgresql、选项数组或对象中插入 jsonb 数据,有效方式【英文标题】:insert jsonb data in postgresql, option array or objects, valid way 【发布时间】:2018-04-18 06:25:12 【问题描述】:

我有这个更新,我已经阅读了 postgresql 文档,但不清楚如何插入数据,一些教程选项:

1.with ''
2.with 
3.with '[]'  <-- array of objects

并且大多数人不'使用'::jsonb',如上所示:

https://www.postgresql.org/docs/9.4/static/datatype-json.html

这是我的代码:

 UPDATE customer set phones ='  "type": "mobile", "phone": "001001" ,
"type": "fix", "phone": "002002"  '::jsonb  
  where id ='4ca27243-6a55-4855-b0e6-d6e1d957f289';

我收到此错误:

ERROR:  invalid input syntax for type json
LINE 1: UPDATE customer set phones ='  "type": "mobile", "phone": ...
                                    ^
DETAIL:  Expected string or "", but found "".
CONTEXT:  JSON data, line 1:   ...
SQL state: 22P02
Character: 29

我只需要记录一些电话,需要附在一个大牌对象中吗?我的意思是对于 javascript,对象数组不是对象,但我不知道 postresql 的 jsonb 中是否接受它

电话:[ "type": "mobile", "phone": "001001" , “类型”:“修复”,“电话”:“002002”]

【问题讨论】:

【参考方案1】:

'' 是 postgres 中的数组类型。如果您使用jsonb,请使用常规'[]' 作为数组:

so=# select jsonb_pretty('"phones":[ "type": "mobile", "phone": "001001" , "type": "fix", "phone": "002002" ] ');
jsonb_pretty

    "phones": [
        
            "type": "mobile",
            "phone": "001001"
        ,
        
            "type": "fix",
            "phone": "002002"
        
    ]

(1 row)
Time: 0.486 ms

或:

so=# select jsonb_pretty('[ "type": "mobile", "phone": "001001" , "type": "fix", "phone": "002002" ]');
jsonb_pretty
[
    
        "type": "mobile",
        "phone": "001001"
    ,
    
        "type": "fix",
        "phone": "002002"
    
]
(1 row)

【讨论】:

【参考方案2】:

示例 1(对象):

CREATE TABLE customer 
  contact JSONB

update customer
set contact = ' "phones":[ "type": "mobile", "phone": "001001" , "type": "fix", "phone": "002002" ] '
where id = '4ca27243-6a55-4855-b0e6-d6e1d957f289';

示例2(数组):

CREATE TABLE customer 
  phones JSONB

update customer
set phones = '[ "type": "mobile", "phone": "001001" , "type": "fix", "phone": "002002" ]'
where id = '4ca27243-6a55-4855-b0e6-d6e1d957f289';

注意事项:

    我的 PostgreSQL 版本
select version();

PostgreSQL 11.2 (Debian 11.2-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit
    确保用双引号将键和值括起来。

【讨论】:

完美答案。你能告诉我如何在PostgreSQL中存储点(经度,纬度) @IrshadKhan PostGIS 可能是您的答案,它是 PostgreSQL 的空间和地理对象:***.com/questions/8150721/…

以上是关于在 postgresql、选项数组或对象中插入 jsonb 数据,有效方式的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 数组类型

Vue方向:Vue实例上使用$set()更新对象或数组

在word中插入pdf中的图片(矢量图)

在word中插入pdf中的图片(矢量图)

在postgres 9.5中插入包含json对象的数组作为行

在 postgresql 的 jsonb[] 类型列中插入数据的正确语法是啥