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

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 中使用什么数据类型吗?提前致谢。

S-M*_*Man 7

如果您的数据始终包含相同的简单结构,我认为没有任何理由将它们存储为 JSON。您应该考虑将其简单地存储在带有列hosttype.

INSERT INTO table(my_host_column, my_type_column) VALUES
(my_json ->> 'host', my_json ->> 'type');
Run Code Online (Sandbox Code Playgroud)

这使许多事情变得更加简单(搜索、更新……)。在您的情况下,Postgres 提供inetIP 地址列的类型。例如,这样的列可以对您的 进行合理性检查hosthttps://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 主要是节省空间(更多元数据)的开销,但通常在操作上要快得多。

进一步阅读

PostgreSQL 引入的 JSONB 说明

PostgreSQL 中 JSONB 数据类型的更快操作


use*_*745 7

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

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

所以TL;DR,Postgres将jsonJSON存储为文本,需要在检索时重新解析它,而jsonb存储需要更长的时间,但在检索时已经解析,并且它可以用作数据库中的索引!这jsonb可能是大多数时候要走的路


小智 6

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

JSON 类型的优点是,Postgresql 比分析内容,您可以稍后将其用于 SELECT 语句,同时考虑 JSON 数据结构。