PostgreSQL 中的 数据类型 使用问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL 中的 数据类型 使用问题相关的知识,希望对你有一定的参考价值。
在 PostgreSQL 中建数据库、数据表,其中一个字段是 smallint[] 数据类型,在使用 SQL语句 写入数据是 发送问题。
SQL语句 摘要:
UPDATE "工作记录"
SET "手册号码"='00001', ... ... , "名次"=int2(38), ... ... ;
提示如下:
********** 错误 **********
错误: 字段 "名次" 的类型为 smallint[], 但表达式的类型为 smallint
SQL 状态: 42804
指导建议:你需要重写或转换表达式
字符:541
请问如何解决?
补充:
... , "名次"=38, ...
一样不对,提示是:错误: 字段 "名次" 的类型为 smallint[], 但表达式的类型为 integer
SQL 状态: 42804
指导建议:你需要重写或转换表达式
字符:541
***************************************
两边的类型不一致,再重写表达式就好了
***************************************
1 楼的大哥 ... 这“表达式”怎么“重写”呀?
问的就是该怎么写 ... ... , "名次"=int2(38) , ... 这个不对,那对的是怎么写呢?
将 json 对象存储到 postgresql 中的数据类型是啥?
【中文标题】将 json 对象存储到 postgresql 中的数据类型是啥?【英文标题】:What is the datatype to store json object into postgresql?将 json 对象存储到 postgresql 中的数据类型是什么? 【发布时间】:2019-03-05 18:04:47 【问题描述】:我对 postgresql 很陌生。
我想将下面的 json 对象存储到 postgresql 数据库中。
"host": "xxx.xxx.xx.xx"
"type": "OS"
你能告诉我我应该在 postgresql 中使用什么数据类型吗?提前致谢。
【问题讨论】:
【参考方案1】:如果您的数据始终包含相同的简单结构,我认为没有任何理由将它们存储为 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
但是,如果您仍想按原样存储 JSON:
如果您不想对它做任何事情,请将其存储为text
类型(我绝对不推荐,因为您不知道未来会发生什么)。如果你想使用 Postgres 的 JSON 函数,你应该将其存储为 json
或 jsonb
类型(https://www.postgresql.org/docs/current/static/datatype-json.html)。
jsonb
主要是节省空间(更多元数据)的开销,但在操作上通常要快得多。
进一步阅读:
Explanation of JSONB introduced by PostgreSQL
Faster Operations with the JSONB Data Type in PostgreSQL
【讨论】:
【参考方案2】:如果不需要交互,只需将它们存储为文本类型(注意文本数据类型的最大大小)。否则 Postgresql 支持 JSON。因此,只需阅读相应的文档https://www.postgresql.org/docs/9.6/static/datatype-json.html
JSON 类型的优点是,Postgresql 可以分析内容,您可以稍后将其用于考虑 JSON 数据结构的 SELECT 语句。
【讨论】:
【参考方案3】:PostgreSQL 有两种 json 数据类型。来自 Postgres 文档:
有两种 JSON 数据类型:json 和 jsonb。它们接受几乎相同的值集作为输入。 主要的实际区别是效率之一。 json 数据类型存储输入文本的精确副本,处理函数必须在每次执行时重新解析;而 jsonb 数据以分解的二进制格式存储,由于增加了转换开销,因此输入速度稍慢,但处理速度明显加快,因为不需要重新解析。 jsonb 还支持索引,这是一个显着的优势。
所以 TL;DR,Postgres 的 json
将 JSON 存储为文本,需要在检索时重新解析它,而 jsonb
需要更长的时间来存储,但在检索时已经解析,并且 em> 它可以用作数据库中的索引!所以jsonb
可能是大多数时候要走的路
【讨论】:
以上是关于PostgreSQL 中的 数据类型 使用问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用新的 PostgreSQL JSON 数据类型中的字段进行查询?
postgresql jsonb的实体框架核心中的等效数据类型