为什么要使用Postgres JSON列类型?

时间:2018-07-03 01:04:12

标签: postgresql

JSON列类型接受无效的JSON

例如 可以插入{},而不必关闭.count()

JSON和字符串之间有区别吗?

2 个答案:

答案 0 :(得分:2)

正如{strong> zerkms 在评论中所述,[1,2,3]是有效的 JSON ,它回答了主要问题: JSON之间是否有任何区别?和字符串?

答案是肯定的。全新的查询操作,函数等集合适用于jsonjsonb列,不适用于text(或相关类型)列。

例如,使用textjson时,在使用jsonb列时,您需要使用正则表达式和相关的字符串函数来解析字符串(或自定义函数)存在一组单独的查询运算符,它们在 JSON 的结构化性质内工作。

Postgres doc中,给出以下 JSON

{
    "guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
    "name": "Angela Barton",
    "is_active": true,
    "company": "Magnafone",
    "address": "178 Howard Place, Gulf, Washington, 702",
    "registered": "2009-11-07T08:53:22 +08:00",
    "latitude": 19.793713,
    "longitude": 86.513373,
    "tags": [
        "enim",
        "aliquip",
        "qui"
    ]
}

然后文档说:

  

我们将这些文档存储在名为api的表中,命名为jsonb列   jdoc。如果在此列上创建了GIN索引,则查询类似于   以下可以利用索引:

-- Find documents in which the key "company" has value "Magnafone"
SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @> '{"company": "Magnafone"}';

这使您对jsonb(或json)字段的查询与仅作为text或相关字段的查询完全不同。

这里有一些Postgres doc,提供了其中一些查询运算符和函数。

基本上,如果您有要作为 JSON 数据处理的 JSON 数据,则最好将列指定为json或{{1} }(选择哪种格式取决于要分别将其存储为纯文本还是二进制)。

答案 1 :(得分:0)

以上数据可以存储为文本,但是JSON数据类型的优势在于您可以在这些列中应用JSON规则。 JSON指定了一些功能,这些功能不能用于文本字段。

Refer to this link to understand about the json functions/procedures