将 json 对象存储到 postgresql 中的数据类型是什么?
What is the datatype to store json object into postgresql?
我是 postgresql 的新手。
我想将下面的 json 对象存储到 postgresql 数据库中。
{
"host": "xxx.xxx.xx.xx"
"type": "OS"
}
你能告诉我我应该在 postgresql 中使用什么数据类型吗?提前致谢。
如果不需要交互,只需将它们存储为文本类型(注意文本数据类型的最大大小)。否则 Postgresql 支持 JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html
JSON 类型的优点是,Postgresql 会分析内容,您可以稍后将其用于 SELECT 语句,同时考虑 JSON 数据结构。
如果您的数据始终包含这种相同的简单结构,我认为没有任何理由将它们存储为 JSON。您应该考虑将其简单地存储在具有 host
和 type
.
列的 table 中
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 函数,您应该将其存储为 json
或 jsonb
类型 (https://www.postgresql.org/docs/current/static/datatype-json.html).
jsonb
的开销主要是保存 space(更多元数据),但在操作上通常要快得多。
进一步阅读:
Explanation of JSONB introduced by PostgreSQL
PostgreSQL 有两种 json 数据类型。来自 Postgres 文档:
There are two JSON data types: json and jsonb. They accept almost identical sets of values as input. The major practical difference is one of efficiency. The json data type stores an exact copy of the input text, which processing functions must reparse on each execution; while jsonb data is stored in a decomposed binary format that makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed. jsonb also supports indexing, which can be a significant advantage.
所以 TL;DR,Postgres 的 json
将 JSON 存储为文本并需要在检索时重新解析它,而 jsonb
需要更长的时间来存储,但已经在检索时解析,和它可以用作数据库中的索引!所以 jsonb
可能是大部分时间要走的路
我是 postgresql 的新手。
我想将下面的 json 对象存储到 postgresql 数据库中。
{
"host": "xxx.xxx.xx.xx"
"type": "OS"
}
你能告诉我我应该在 postgresql 中使用什么数据类型吗?提前致谢。
如果不需要交互,只需将它们存储为文本类型(注意文本数据类型的最大大小)。否则 Postgresql 支持 JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html
JSON 类型的优点是,Postgresql 会分析内容,您可以稍后将其用于 SELECT 语句,同时考虑 JSON 数据结构。
如果您的数据始终包含这种相同的简单结构,我认为没有任何理由将它们存储为 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)
但是,如果您仍想按原样存储 JSON:
如果您不想对其进行任何操作,请将其存储为 text
类型(我绝对不推荐这样做,因为您不知道未来会发生什么)。如果您想使用 Postgres 的 JSON 函数,您应该将其存储为 json
或 jsonb
类型 (https://www.postgresql.org/docs/current/static/datatype-json.html).
jsonb
的开销主要是保存 space(更多元数据),但在操作上通常要快得多。
进一步阅读:
Explanation of JSONB introduced by PostgreSQL
PostgreSQL 有两种 json 数据类型。来自 Postgres 文档:
There are two JSON data types: json and jsonb. They accept almost identical sets of values as input. The major practical difference is one of efficiency. The json data type stores an exact copy of the input text, which processing functions must reparse on each execution; while jsonb data is stored in a decomposed binary format that makes it slightly slower to input due to added conversion overhead, but significantly faster to process, since no reparsing is needed. jsonb also supports indexing, which can be a significant advantage.
所以 TL;DR,Postgres 的 json
将 JSON 存储为文本并需要在检索时重新解析它,而 jsonb
需要更长的时间来存储,但已经在检索时解析,和它可以用作数据库中的索引!所以 jsonb
可能是大部分时间要走的路