Я настраиваю базу данных, в которую импортирую электронные таблицы .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 расходится с оператором SQL, указанным в КОНТЕКСТЕ. Строка 223 функции pivot_raw2txt () вообще не имеет SQL - это присвоение значения целочисленной переменной. 222 случайно имеет другой оператор INSERT, ссылающийся на другую таблицу. Оператор SQL, цитируемый в КОНТЕКСТЕ, - одиннадцатью строками позже, в 234. Любая идея, почему было бы это расхождение в номере строки?
Поле, о котором идет речь, я довольно конечно, это sample_id_db. Вчера была ширина 36, но я расширил ее до 60, чтобы вместить более длинные струны. Со вчерашнего дня я перезапустил и pgAdmin, и сервис postgreSQL, но что-то все еще думает, что поле имеет ширину 36. На самом деле, в txtdata с шириной 36 нет полей varchar в любой из моих таблиц. Что может быть источником проблемы «все еще думает, что это 36»?
PostgreSQL 11, и кодировка UTF-8, если это имеет значение.
Обновление: эта база данных должна быть прочитана через связанные таблицы в другом программном обеспечении. Создание связанных таблиц является громоздким и должно выполняться каждый раз, когда изменяется ширина поля. Удобно установить sh ширины полей, которые шире, чем ожидаемые данные, и оставить все как есть.
Update2: Думая, что с таблицей может быть что-то не так, я выбрал ее каскадно и перестроен, снова с шириной поля 60. Идентичный результат при выполнении вставки.