我对Postgresql非常陌生。
我想将json对象下面的内容存储到postgresql数据库中。
{
"host": "xxx.xxx.xx.xx"
"type": "OS"
}
能否请您告诉我在postgresql中应该使用哪种数据类型。预先感谢。
答案 0 :(得分:3)
如果不需要交互,只需将它们存储为文本类型(请注意文本数据类型的最大大小)。否则,Postgresql支持JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html
JSON类型的优势在于,Postgresql可以分析内容,以后您可以将其用于考虑JSON数据结构的SELECT语句。
答案 1 :(得分:2)
如果您的数据始终包含相同的简单结构,那么我看不出有任何理由将其存储为JSON。您应该考虑将其简单地存储在具有列host
和type
的表中。
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)
如果您不想对其进行任何操作,请将其存储为text
类型(由于您不知道未来会带来什么,所以我不建议您这样做)。如果要使用Postgres的JSON函数,则应将其存储为json
或jsonb
类型(https://www.postgresql.org/docs/current/static/datatype-json.html)。
jsonb
主要是节省空间(更多元数据)的开销,但通常在操作上要快得多。
进一步阅读:
答案 2 :(得分:0)
PostgreSQL有两种json数据类型。来自Postgres文档:
有两种JSON数据类型:json和jsonb。他们接受几乎相同的值集作为输入。 主要的实际差异是效率之一。 json数据类型存储输入文本的精确副本,处理函数必须在每次执行时重新解析; jsonb数据以分解后的二进制格式存储,由于增加了转换开销,因此输入速度稍慢,但由于不需要解析,因此处理速度明显更快。 jsonb还支持索引编制,这可能是一个很大的优势。
因此TL; DR,Postgres的json
将JSON作为文本存储,并且需要在检索时重新解析它,而jsonb
的存储时间要长一点,但是在检索时已经被解析了,并且它可以用作数据库中的索引!因此,jsonb
可能是大多数情况下使用的方式