首页 > 解决方案 > postgreSQL & PL/pgSQL:varchar(36) 的值太长,但我昨天将字段扩大到 60

问题描述

我正在设置一个要向其中导入 .xlsx 电子表格的数据库。在此过程中,我遇到了字段长度问题,并根据需要扩大了字段。到目前为止,这已经解决了问题。

今天我收到以下消息:

ERROR:  value too long for type character varying(36)
CONTEXT:  SQL statement "INSERT INTO nvschema.txtdata (tuid, customersamplenumber, samplenumber, sample_id_db, location, sampledate, sampletime, qaqc_type, datasource, laboratory)
                       VALUES (theuid, str1, str4, str5 || '_' || str2 || str3 || '_' || str6, str5, str2, str3, str6, str7,str8)"
PL/pgSQL function nvschema.pivot_raw2txt() line 223 at SQL statement
PL/pgSQL function nvschema.rebuild_analyses() line 10 at assignment
SQL state: 22001

这里有两件事让我感到困惑:

  1. 对第 223 行的引用与 CONTEXT 中引用的 SQL 语句不一致。pivot_raw2txt() 的第 223 行根本没有 SQL——它是对整数变量的赋值。222 碰巧有不同的 INSERT 语句引用不同的表。CONTEXT 中引用的 SQL 语句在 234 行之后的 11 行。知道为什么行号会有这种差异吗?

  2. 我很确定,有问题的字段是“sample_id_db”。昨天是 36 宽,但我把它加宽到 60 以容纳更长的字符串。从昨天开始,我重新启动了 pgAdmin 和 postgreSQL 服务,但仍然认为该字段的宽度为 36。事实上,我的任何表中的 txtdata 中都没有宽度为 36 的 varchar 字段。'still-thinks-it's-36' 问题的根源是什么?

PostgreSQL 11,编码是 UTF-8,如果有区别的话。

更新:此数据库需要通过其他软件中的链接表读取。构建链接表很麻烦,每次更改字段宽度时都需要完成。建立比我期望容纳的数据更宽的字段宽度并保持这种方式很方便。

更新 2:认为表可能有问题,我将其拖放并重建,再次使用字段宽度 60。执行插入时的结果相同。

标签: postgresqlplpgsql

解决方案


为什么你的'sample_id_db'有一个固定的宽度,没有目的。让 Postgresql 快速解决它 -

创建表 xxx(sample_id_db VARCHAR 等)


推荐阅读