Postgres рассматривает переменные символы как целые

У меня есть столбец в схеме отношения типа данных character varying. Хотя столбец имеет character varying, я вставлял данные типа integer и не осознавал ошибку до тех пор, пока мне действительно не потребовалось ввести данные символьного типа. Это ошибка, которую я получаю

insert into my_table(bad_column) values ('bad column');  

Error: invalid input syntax for integer: "bad column".

В чем может быть проблема? Я подтвердил тип данных столбца, запустив приведенный ниже код, и он фактически возвращает символы, меняющие

select pg_typeof(bad_column) FROM my_table limit 10 

person Nix    schedule 01.12.2017    source источник
comment
Напишите MCVE.   -  person clemens    schedule 01.12.2017
comment
вам необходимо предоставить нам достаточно информации, чтобы попытаться воспроизвести проблему, недостаточно информации было предоставлено. DDL для настройки этого столбца и примеров вставок целых чисел   -  person Paul Maxwell    schedule 01.12.2017
comment
отредактируйте свой вопрос и добавьте выражение create table для этой таблицы (не размещайте код в комментариях)   -  person a_horse_with_no_name    schedule 01.12.2017
comment
@a_horse_with_no_name Реальная таблица очень большая, около 20 столбцов, размещение всей таблицы здесь создало бы больше путаницы   -  person Nix    schedule 01.12.2017
comment
@clemens Реальная таблица очень большая, около 20 столбцов, размещение всей таблицы здесь создало бы больше путаницы   -  person Nix    schedule 01.12.2017
comment
@Used_By_Already Реальная таблица очень большая, около 20 столбцов, публикация всей таблицы здесь создала бы больше путаницы   -  person Nix    schedule 01.12.2017
comment
Нет, это не создаст путаницы - это позволит людям найти решение вашей проблемы. Учитывая сообщение об ошибке, я почти уверен, что Postgres верен и что вы определили столбец как integer, но, поскольку вы не хотите показывать нам таблицу, мы ничего не можем сделать.   -  person a_horse_with_no_name    schedule 01.12.2017
comment
@a_horse_with_no_name, пожалуйста, проверьте правку, я подтвердил тип данных, и он показывает, что символы меняются   -  person Nix    schedule 01.12.2017


Ответы (1)


Вы должны проверить, имеет ли определение таблицы контрольное ограничение, например

create table test(bad_column varchar check (bad_column::int > 0));
insert into test (bad_column) values ('a text');

ERROR:  invalid input syntax for integer: "a text"

Другой вариант - это приведение столбца к целому числу в триггере.

Оба случая - довольно причудливые решения, вам следует изменить тип столбца на целое число.

person klin    schedule 01.12.2017
comment
Я проверил описание таблицы, и он показал индекс, который я создал без указания типа данных, но postgres автоматически преобразовал его в целое число. - person Nix; 01.12.2017