将json对象存储到Postgresql中的数据类型是什么?

时间:2018-09-30 11:20:50

标签: node.js postgresql postgresql-9.5

我对Postgresql非常陌生。

我想将json对象下面的内容存储到postgresql数据库中。

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

能否请您告诉我在postgresql中应该使用哪种数据类型。预先感谢。

3 个答案:

答案 0 :(得分:3)

如果不需要交互,只需将它们存储为文本类型(请注意文本数据类型的最大大小)。否则,Postgresql支持JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html

JSON类型的优势在于,Postgresql可以分析内容,以后您可以将其用于考虑JSON数据结构的SELECT语句。

答案 1 :(得分:2)

如果您的数据始终包含相同的简单结构,那么我看不出有任何理由将其存储为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)https://www.postgresql.org/docs/current/static/functions-json.html

重新创建JSON。


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

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

jsonb主要是节省空间(更多元数据)的开销,但通常在操作上要快得多。

进一步阅读

Explanation of JSONB introduced by PostgreSQL

https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/ttps://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/

答案 2 :(得分:0)

PostgreSQL有两种json数据类型。来自Postgres文档:

有两种JSON数据类型:json和jsonb。他们接受几乎相同的值集作为输入。 主要的实际差异是效率之一。 json数据类型存储输入文本的精确副本,处理函数必须在每次执行时重新解析; jsonb数据以分解后的二进制格式存储,由于增加了转换开销,因此输入速度稍慢,但由于不需要解析,因此处理速度明显更快。 jsonb还支持索引编制,这可能是一个很大的优势。

因此TL; DR,Postgres的json将JSON作为文本存储,并且需要在检索时重新解析它,而jsonb的存储时间要长一点,但是在检索时已经被解析了,并且它可以用作数据库中的索引!因此,jsonb可能是大多数情况下使用的方式