如何在PostgreSQL中存储JSON对象的数据类型是什么?

13

我对postgresql非常陌生。

我想把以下json对象存储到postgresql数据库中。

{
  "host": "xxx.xxx.xx.xx"
  "type": "OS"
}

请问在postgresql中应该使用什么数据类型?谢谢。

3个回答

10
如果你的数据总是包含这种简单的结构,我认为没有必要将它们存储为JSON格式。你应该考虑将它们简单地存储在一个带有 hosttype列的表中。

如果你的数据总是包含这种简单的结构,我认为没有必要将它们存储为JSON格式。你应该考虑将它们简单地存储在一个带有hosttype列的表中。

INSERT INTO table(my_host_column, my_type_column) VALUES
(my_json ->> 'host', my_json ->> 'type');

这可使许多事情变得更加简单(搜索、更新等)。在您的情况下,Postgres为IP地址列提供了inet类型。这样一个列可以对您的host进行合理性检查,例如(https://www.postgresql.org/docs/current/static/datatype-net-types.html)

您可以随时使用 json_build_object('host', my_host_column, 'type', my_type_column) 重新创建JSON (https://www.postgresql.org/docs/current/static/functions-json.html)


但如果您仍然想按原样存储JSON:

如果您不想做任何操作,请将其存储为text类型(我绝对不建议这样做,因为您不知道未来会带来什么)。如果要使用Postgres的JSON函数,则应将其存储为jsonjsonb类型(https://www.postgresql.org/docs/current/static/datatype-json.html)。

jsonb主要具有节省空间的开销(更多元数据),但在操作方面通常更快。

进一步阅读:

解释PostgreSQL引入JSONB的原因

使用PostgreSQL中的JSONB数据类型进行更快的操作


7
如果不需要交互,只需将它们存储为文本类型(请注意文本数据类型的最大大小)。否则,PostgreSQL支持JSON。因此,只需阅读相应的文档:https://www.postgresql.org/docs/9.6/static/datatype-json.html JSON类型的优点是,PostgreSQL会分析内容,并且您可以在后续的SELECT语句中考虑JSON数据结构。

7
PostgreSQL有两种json数据类型。来自Postgres文档:
引用: 有两种JSON数据类型:json和jsonb。它们接受几乎相同的输入值集。主要实际区别在于其效率。json数据类型存储输入文本的完全副本,处理函数必须在每次执行时重新解析;而jsonb数据以分解的二进制格式存储,这使得输入稍微慢一些,因为需要添加转换开销,但是在处理速度上明显更快,因为不需要重新解析。jsonb还支持索引,这可以是一个显著的优势。
所以简而言之,Postgres的“json”将JSON存储为文本,并在检索时需要重新解析,而“jsonb”在存储时需要花费更长的时间,但在检索时已经解析完成,并且它可以被用作数据库中的索引!因此,在大多数情况下,“jsonb”可能是更好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接