postgresql - 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
这里有两件事让我感到困惑:
对第 223 行的引用与 CONTEXT 中引用的 SQL 语句不一致。pivot_raw2txt() 的第 223 行根本没有 SQL——它是对整数变量的赋值。222 碰巧有不同的 INSERT 语句引用不同的表。CONTEXT 中引用的 SQL 语句在 234 行之后的 11 行。知道为什么行号会有这种差异吗?
我很确定,有问题的字段是“sample_id_db”。昨天是 36 宽,但我把它加宽到 60 以容纳更长的字符串。从昨天开始,我重新启动了 pgAdmin 和 postgreSQL 服务,但仍然认为该字段的宽度为 36。事实上,我的任何表中的 txtdata 中都没有宽度为 36 的 varchar 字段。'still-thinks-it's-36' 问题的根源是什么?
PostgreSQL 11,编码是 UTF-8,如果有区别的话。
更新:此数据库需要通过其他软件中的链接表读取。构建链接表很麻烦,每次更改字段宽度时都需要完成。建立比我期望容纳的数据更宽的字段宽度并保持这种方式很方便。
更新 2:认为表可能有问题,我将其拖放并重建,再次使用字段宽度 60。执行插入时的结果相同。
解决方案
为什么你的'sample_id_db'有一个固定的宽度,没有目的。让 Postgresql 快速解决它 -
创建表 xxx(sample_id_db VARCHAR 等)
推荐阅读
- entity-framework - 使用 Entity Framework Core 3.1 在 OnModelCreating 中定义一对多关系
- macos - 在不满足 Apple 要求的情况下启用封闭显示模式
- c++ - 对具有 k 个已排序部分的 n 个元素的数组进行排序
- javascript - 如何在 React 中插入渲染文本?
- razor - 无法在 .NET Core 中的 .cshtml 中的本地函数中使用标记
- ruby-on-rails - 无法保存嵌套模型的数据
- verilog - 为 D FF 写一个verilog
- java - 导入类 Java 问题 Minecraft 插件
- javascript - 带参数的 Vue Router 动态段
- windows - 在脚本 .bat 中阻止字符输入