检查Postgres中JSON值的值类型

时间:2014-11-18 08:52:16

标签: json postgresql postgresql-json

假设我有一个json列字段,如下所示:

 {phone: 5555555555, address: "55 awesome street", hair_color: "green"}

我想要做的是更新所有存在json手机的条目,结果类型为字符串。

我拥有的是:

 SELECT *
 FROM parent_object
 WHERE (fields->'phone') IS NOT NULL;

不幸的是,这仍然会返回phone:null的值。我猜JSON null不等同于SQL NULL

我该怎么做 1)如何排除JSON空值 AND (fields->'phone') <> null生成

 LINE 4: ...phone') IS NOT NULL AND (fields->'phone') <> 'null';
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

2)检查该键的值的类型,这个伪代码(type_of (fields->'phone') == Integer)但在工作PGSQL中。

3)修改此项以更新列

 UPDATE parent_object
 SET fields.phone = to_char(fields.phone)
 WHERE  query defined above

1 个答案:

答案 0 :(得分:1)

  1. 正如其他人所说,没有理由将变量转换为整数,只是将它转换为字符串。此外,电话号码不是数字。 : - )

  2. 您需要使用->>运算符而不是->。与IS NOT NULL一起使您的SELECT查询正常工作。

    注意运行此查询后两个元组值之间的差异:

    SELECT fields->'phone', fields->>'phone'
    FROM parent_object;
    

    您的工作查询:

    SELECT *
    FROM parent_object
    WHERE (fields->>'phone') IS NOT NULL;
    
  3. Postgres目前本身不支持以原子方式更新JSON列中的各个键。您可以编写包装器UDF来为您提供此功能:How do I modify fields inside the new PostgreSQL JSON datatype?