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) , ... 这个不对,那对的是怎么写呢?

参考技术A 两边的类型不一致,再重写表达式就好了

将 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。您应该考虑将其简单地存储在包含 hosttype 列的表中。

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 函数,你应该将其存储为 jsonjsonb 类型(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数据类型

postgresql jsonb的实体框架核心中的等效数据类型

将 json 对象存储到 postgresql 中的数据类型是啥?

PostgreSQL 数据类型

将不同格式列的String数据类型的日期转换为PostgreSQL中的日期数据类型