Hem*_*ari 8 postgresql node.js postgresql-9.5
我对 postgresql 很陌生。
我想将下面的 json 对象存储到 postgresql 数据库中。
{
"host": "xxx.xxx.xx.xx"
"type": "OS"
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我我应该在 postgresql 中使用什么数据类型吗?提前致谢。
如果您的数据始终包含相同的简单结构,我认为没有任何理由将它们存储为 JSON。您应该考虑将其简单地存储在带有列host
和type
.
INSERT INTO table(my_host_column, my_type_column) VALUES
(my_json ->> 'host', my_json ->> 'type');
Run Code Online (Sandbox Code Playgroud)
这使许多事情变得更加简单(搜索、更新……)。在您的情况下,Postgres 提供inet
IP 地址列的类型。例如,这样的列可以对您的 进行合理性检查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
如果您不想对它做任何事情,请将其存储为text
类型(我绝对不推荐这样做,因为您不知道未来会带来什么)。如果您想使用 Postgres 的 JSON 函数,您应该将其存储为json
或jsonb
类型(https://www.postgresql.org/docs/current/static/datatype-json.html)。
jsonb
主要是节省空间(更多元数据)的开销,但通常在操作上要快得多。
进一步阅读:
PostgreSQL 有两种 json 数据类型。来自 Postgres 文档:
JSON 数据类型有两种:json 和 jsonb。它们接受几乎相同的值集作为输入。主要的实际差异是效率之一。json 数据类型存储输入文本的精确副本,处理函数必须在每次执行时重新解析;而 jsonb 数据以分解的二进制格式存储,由于增加了转换开销,输入速度稍慢,但处理速度明显加快,因为不需要重新解析。jsonb 还支持索引,这是一个显着的优势。
所以TL;DR,Postgres将json
JSON存储为文本,需要在检索时重新解析它,而jsonb
存储需要更长的时间,但在检索时已经解析,并且它可以用作数据库中的索引!这jsonb
可能是大多数时候要走的路
小智 6
如果不需要交互,只需将它们存储为文本类型(注意文本数据类型的最大大小)。否则 Postgresql 支持 JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html
JSON 类型的优点是,Postgresql 比分析内容,您可以稍后将其用于 SELECT 语句,同时考虑 JSON 数据结构。