Ошибка неверное значение для целого числа postgresql

Собственно запрос

Select t_id,end_data, 
case when tbl_city.NAZV is null then tc_name else tc_name || ', ' || NAZV end || ', ' || address as NAZV, 
case status when 0 then 'Не подтверждена' when 1 then 'Подтверждена' when 2 then 'В работе' when 3 then 'На проверке' else 'Закрыта' end as st,
case when cell_ticket is null then 'Не назначено' else cell_ticket end as st,
case when cell_ticket is null then 'Не указано' else cell_ticket end as cell
from us_ticket.ticket
join us_ticket.tbl_countryside on ticket.city_id = tbl_countryside.tc_id
left join us_ticket.tbl_city on tbl_countryside.citycode = tbl_city.city_id;

Ошибка на строке

case when cell_ticket is null then 'Не указано' else cell_ticket end as cell

Как только ее убираю все начинает работать. Ругается на эту часть then "Не указано"

Текст ошибки

ОШИБКА: неверное значение для целого числа: «Не указано»
СТРОКА 1: …та’ end as st, case when cell_ticket is null then ‘Не указан…

Я уже искал и пытался исправить ошибку, но я не мог этого сделать. В чем проблема внутри моего кода? Я вставлю код и ошибку ниже. Как я понимаю, это о типе данных. Если я сделаю какие-либо грамматические ошибки, извините за это.

$sql = <<<SQL
INSERT INTO karakter (KullanıcıAdı,uid,Isim,Cinsiyet,Irk,Boy,Kilo,Gün,Ay,Yıl,Güç,Bünye,Dayanıklılık,Çeviklik,Karizma,Zeka,İrade,Odaklanma,Ustalık,Ziraat,İşçilik,Aşçılık,Botanik,Balıkçılık,Dericilik,Marangozluk,Hekimlik,VahşiYaşam,DuvarUstalığı,Camcılık,Demircilik,Avcılık,Şarapçılık,Çekilme,Kalkan,Hançer,Kılıç,Balta,Gürz,Mızrak,Yay,Arbalet)
VALUES ("$user","$uid","$isim","$cinsiyet","$irk","$boy","$kilo","$gun","$ay","$yil","$Güç","$Bünye","$Dayanıklılık","$Çeviklik","$Karizma","$Zeka","$İrade","$Odaklanma","$Ustalık",'$Ziraat',"$İşçilik","$Aşçılık","$Botanik","$Balıkçılık","$Dericilik","$Marangozluk","$Hekimlik","$VahşiYaşam","$DuvarUstalığı","$Camcılık","$Demircilik","$Avcılık","$Şarapçılık","$Çekilme","$Kalkan","$Hançer","$Kılıç","$Balta","$Gürz","$Mızrak","$Yay","$Arbalet")
ON DUPLICATE KEY UPDATE
KullanıcıAdı=VALUES(KullanıcıAdı),
uid=VALUES(uid),
Isim=VALUES(Isim),
Cinsiyet=VALUES(Cinsiyet),
Irk=VALUES(Irk),
Boy=VALUES(Boy),
Kilo=VALUES(Kilo),
Gün=VALUES(Gün),
Ay=VALUES(Ay),
Yıl=VALUES(Yıl),
Güç=VALUES(Güç),
Bünye=VALUES(Bünye),
Dayanıklılık=VALUES(Dayanıklılık),
Çeviklik=VALUES(Çeviklik),
Karizma=VALUES(Karizma),
Zeka=VALUES(Zeka),
İrade=VALUES(İrade),
Odaklanma=VALUES(Odaklanma),
Ustalık=VALUES(Ustalık),
Ziraat=VALUES(Ziraat),
İşçilik=VALUES(İşçilik),
Aşçılık=VALUES(Aşçılık),
Botanik=VALUES(Botanik)
SQL;

Ошибка:

Неверное целочисленное значение: » для столбца ‘Ziraat’ в строке 1

3

240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

1

26.10.2015, 14:03. Показов 25590. Ответов 23


Студворк — интернет-сервис помощи студентам

Добрый день! Скажите, пожалуйста. Можно в PostgreSQL как-нибудь автоматически заполнить таблицу данными из Excel?



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

26.10.2015, 14:25

2

напрямую в excel не уверен, что такое есть… но есть запись данных в CSV-файл. см. COPY



1



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 07:04

 [ТС]

3

У меня прав нет:
ОШИБКА: для использования COPY с файлами нужно быть суперпользователем
HINT: Не имея административных прав, можно использовать COPY с stdout и stdin (а также команду psql copy).

Я еще пробовала через интерфейс pgAdmin III сделать. Выбираю таблицу, в меню выбираю Импорт. Открывается окно: ‘Import data from file into tablename’ Нужно выбрать формат и кодировку. Формат выбираю csv, кодировку — по умолчанию UTF8. Жму Импорт. Выдает ошибку: Неверная последовательность байт для кодировки UTF8.



0



grgdvo

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 07:43

4

Да, забыл про права суперпользователя…

Для psql тоже достаточно легко делается

Bash
1
psql -c "copy mytable from mydata.csv (format csv)" mydb -U myuser

Цитата
Сообщение от Simply me
Посмотреть сообщение

Жму Импорт. Выдает ошибку: Неверная последовательность байт для кодировки UTF8.

А выбранный файл точно имеет кодировку UTF8??? Я вот у себя решил проверить, все импортиться прекрасно.



1



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 08:14

 [ТС]

5

Цитата
Сообщение от grgdvo
Посмотреть сообщение

А выбранный файл точно имеет кодировку UTF8???

Не точно. Я что-то не помню, как проверить кодировку. Файл экселевский.



0



grgdvo

1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 08:21

6

Вы на windows или linux?
Если windows, то с большой долей вероятности excel создаст csv-файл в кодировке win1251.
В linux

Bash
1
enca filename.csv



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 08:25

 [ТС]

7

Windows. Выбрала кодировку win1251. Все равно ошибка.
Неверная последовательность байт для кодировки «WIN1251»



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 08:44

8

Может тогда cp866 )
В windows уже не работаю, раньше помню FarManager умел кодировки показывать.

Добавлено через 6 минут
Проверил у себя в виртуалке… У меня 2007 эксель стоит… сохраняет как CSV (MSDOS) — это кодировка cp866



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 09:44

 [ТС]

9

У меня нет такого варианта. Есть вариант WIN866
Вообщем перемерила все предлагаемые кодировки. Везде одна и та же ошибка: Неверная последовательность байт для кодировки…
А при проверке кодировки MULE_INTERNAL ошибка: Неверное значение для целого числа «…» И там какие-то косячные символы.



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 09:55

10

Полагаю стоит заново начать с экспорта в экселе, заново сделать CSV-файл, открыть его тем же notepad’ом и посмотреть, что там внутри. Я сейчас не могу проверить WIN866, но позже просто ради интереса попробую.



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 10:43

 [ТС]

11

Я не очень поняла) Это не экспортированный файл. Просто экселевский файл. Сама создавала. Сейчас сохранила как csv. Открыла notepad’ом. Там все нормально отображается, только вместо границ ячеек ‘;’ Зашла в Notepad на вкладку Кодировки. Там отмечена Кодировка в UTF-8 (без BOM).



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 12:59

12

Ну теперь импорт полученного csv-файла делайте в postgresql. что получится?



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 13:12

 [ТС]

13

grgdvo, спасибо! С кодировкой понятно Теперь с типами проблемы. У меня в этом файле 1 запись. Первый столбец — idшник, остальные — null. При импорте пишет ошибку: неверное значение для целого числа: «139;;;;;;;;;;;;» Почему-то он не понимает, что точка с запятой к следующим столбцам относится.

Добавлено через 2 минуты
Я просто раньше не работала с БД



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 13:33

14

Цитата
Сообщение от Simply me
Посмотреть сообщение

точка с запятой к следующим столбцам относится.

Нужно указать, что разделителем полей будет «точка с запятой», по умолчанию «запятая» используется (от CSV = Comma-Separated Values). Но Excel почему-то решил, что надо непременно «;» использовать.
Вот снимок экрана моего pgadmin. При импорте поменяйте разделитель. Еще возможно с NULL-значениями придется поработать, если у вас в файле есть такие пустоты со значениями. Также нужно по структуре таблицы пройтись. У вас количество полей соответствует количество колонок в excel?? возможно придется указать порядок колонок.

Импорт данных из Excel



1



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 13:48

 [ТС]

15

Спасибо,grgdvo, получилось импортировать!)) Последний вопрос. У меня десятичный разделитель был запятая, перед импортом я заменила ее на точку. Потом я буду импортировать файл, где 6000 записей, и тоже везде десятичный разделитель запятая. Лучше в Excel везде поменять на точку или можно где-нибудь при импорте указать, что десятичный разделитель запятая?



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

27.10.2015, 14:07

16

Будет проще и быстрее поменять в экселе запятую на точку, чем городить с локализацией и восприятием формата вещественного числа.



1



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

27.10.2015, 14:09

 [ТС]

17

Ясно, спасибо!



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

29.10.2015, 07:24

 [ТС]

18

grgdvo, а Вы пробовали импортировать столбцы, в которых есть кириллица? У таких столбцов все-таки проблема с кодировкой



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

29.10.2015, 13:27

19

У меня CSV-файл был в кодировке UTF-8 и база данных создана в UTF-8. Все импортировалось успешно!



0



240 / 34 / 7

Регистрация: 05.05.2012

Сообщений: 515

29.10.2015, 13:29

 [ТС]

20

А где проверить кодировки CSV-файла и базы данных?



0



Running COPY results in ERROR: invalid input syntax for integer: "" error message for me. What am I missing?

My /tmp/people.csv file:

"age","first_name","last_name"
"23","Ivan","Poupkine"
"","Eugene","Pirogov"

My /tmp/csv_test.sql file:

CREATE TABLE people (
  age        integer,
  first_name varchar(20),
  last_name  varchar(20)
);

COPY people
FROM '/tmp/people.csv'
WITH (
  FORMAT CSV,
  HEADER true,
  NULL ''
);

DROP TABLE people;

Output:

$ psql postgres -f /tmp/sql_test.sql
CREATE TABLE
psql:sql_test.sql:13: ERROR:  invalid input syntax for integer: ""
CONTEXT:  COPY people, line 3, column age: ""
DROP TABLE

Trivia:

  • PostgreSQL 9.2.4

asked Aug 18, 2013 at 10:08

oldhomemovie's user avatar

oldhomemovieoldhomemovie

14.5k13 gold badges64 silver badges98 bronze badges

1

ERROR: invalid input syntax for integer: «»

"" isn’t a valid integer. PostgreSQL accepts unquoted blank fields as null by default in CSV, but "" would be like writing:

SELECT ''::integer;

and fail for the same reason.

If you want to deal with CSV that has things like quoted empty strings for null integers, you’ll need to feed it to PostgreSQL via a pre-processor that can neaten it up a bit. PostgreSQL’s CSV input doesn’t understand all the weird and wonderful possible abuses of CSV.

Options include:

  • Loading it in a spreadsheet and exporting sane CSV;
  • Using the Python csv module, Perl Text::CSV, etc to pre-process it;
  • Using Perl/Python/whatever to load the CSV and insert it directly into the DB
  • Using an ETL tool like CloverETL, Talend Studio, or Pentaho Kettle

answered Aug 18, 2013 at 10:57

Craig Ringer's user avatar

Craig RingerCraig Ringer

303k74 gold badges680 silver badges764 bronze badges

2

I think it’s better to change your csv file like:

"age","first_name","last_name"
23,Ivan,Poupkine
,Eugene,Pirogov

It’s also possible to define your table like

CREATE TABLE people (
  age        varchar(20),
  first_name varchar(20),
  last_name  varchar(20)
);

and after copy, you can convert empty strings:

select nullif(age, '')::int as age, first_name, last_name
from people

answered Aug 18, 2013 at 10:58

Roman Pekar's user avatar

Roman PekarRoman Pekar

106k28 gold badges192 silver badges196 bronze badges

2

Just came across this while looking for a solution and wanted to add I was able to solve the issue by adding the «null» parameter to the copy_from call:

cur.copy_from(f, tablename, sep=',', null='')

answered Sep 19, 2019 at 12:38

helderreis's user avatar

helderreishelderreis

1111 silver badge3 bronze badges

1

I got this error when loading ‘|’ separated CSV file although there were no ‘»‘ characters in my input file. It turned out that I forgot to specify FORMAT:

COPY … FROM … WITH (FORMAT CSV, DELIMITER ‘|’).

answered Mar 11, 2018 at 0:09

Slobodan Savkovic's user avatar

0

Use the below command to copy data from CSV in a single line without casting and changing your datatype.
Please replace «NULL» by your string which creating error in copy data

copy table_name from 'path to csv file' (format csv, null "NULL", DELIMITER ',', HEADER);

answered Dec 31, 2019 at 9:25

Anil's user avatar

AnilAnil

1331 silver badge8 bronze badges

1

I had this same error on a postgres .sql file with a COPY statement, but my file was tab-separated instead of comma-separated and quoted.

My mistake was that I eagerly copy/pasted the file contents from github, but in that process all the tabs were converted to spaces, hence the error. I had to download and save the raw file to get a good copy.

answered Aug 31, 2015 at 15:02

zwippie's user avatar

zwippiezwippie

14.9k3 gold badges38 silver badges54 bronze badges

CREATE TABLE people (
  first_name varchar(20),
  age        integer,
  last_name  varchar(20)
);

«first_name»,»age»,»last_name»
Ivan,23,Poupkine
Eugene,,Pirogov

copy people from 'file.csv' with (delimiter ‘;’, null »);

select * from people;

Just in first column…..

Feras Al Sous's user avatar

answered Oct 16, 2018 at 12:06

WSchnuble's user avatar

1

Ended up doing this using csvfix:

csvfix map -fv '' -tv '0' /tmp/people.csv > /tmp/people_fixed.csv

In case you know for sure which columns were meant to be integer or float, you can specify just them:

csvfix map -f 1 -fv '' -tv '0' /tmp/people.csv > /tmp/people_fixed.csv

Without specifying the exact columns, one may experience an obvious side-effect, where a blank string will be turned into a string with a 0 character.

answered Aug 18, 2013 at 14:10

oldhomemovie's user avatar

oldhomemovieoldhomemovie

14.5k13 gold badges64 silver badges98 bronze badges

2

this ought to work without you modifying the source csv file:

alter table people alter column age type text;
copy people from '/tmp/people.csv' with csv;

answered Aug 24, 2017 at 18:05

soyayix's user avatar

soyayixsoyayix

1771 silver badge7 bronze badges

0

There is a way to solve «», the quoted null string as null in integer column,
use FORCE_NULL option :

copy table_name FROM 'file.csv' with (FORMAT CSV, FORCE_NULL(column_name));

see postgresql document, https://www.postgresql.org/docs/current/static/sql-copy.html

answered Oct 1, 2018 at 22:14

Charlie 木匠's user avatar

Charlie 木匠Charlie 木匠

2,16419 silver badges19 bronze badges

All in python (using psycopg2), create the empty table first then use copy_expert to load the csv into it. It should handle for empty values.

import psycopg2
conn = psycopg2.connect(host="hosturl", database="db_name", user="username", password="password")
cur = conn.cursor()
cur.execute("CREATE TABLE schema.destination_table ("
            "age integer, "
            "first_name varchar(20), "
            "last_name varchar(20)"
            ");")

with open(r'C:/tmp/people.csv', 'r') as f:
    next(f)  # Skip the header row. Or remove this line if csv has no header.
    conn.cursor.copy_expert("""COPY schema.destination_table FROM STDIN WITH (FORMAT CSV)""", f)

answered Nov 4, 2020 at 16:40

Theo F's user avatar

Theo FTheo F

1,1571 gold badge11 silver badges18 bronze badges

Incredibly, my solution to the same error was to just re-arrange the columns. For anyone else doing the above solutions and still not getting past the error.

I apparently had to arrange the columns in my CSV file to match the same sequence in the table listing in PGADmin.

answered Oct 17, 2020 at 21:13

user3507825's user avatar

user3507825user3507825

4285 silver badges13 bronze badges

Активист


  • #1

C PostgreSQL не работа, но надо пару задач сделать. Подскажите, нужно безусловное приводение типов к int / decimal. Что бы не валилась ошибка, а то валится в FATAL, ибо обработчик такой:

PHP:

<?php
/**
* Класс для работы с базой данных PostgreSQL
*/
class app_db_pgsql
{
    /**
    * Аттрибут объекта содержит текущую ссылку на соединение с СУБД (connection id)
    * @var resource|null
    */
    private static $connection_id;

    /**
    * Аттрибут содержит ресурс выполненный функцией pg_execute
    * @var resource
    */
    private $_last_pg_query_resource;

    /**
    * Метод выполняет соединение с postgresql или если соединение установлено возвращает текущий линк
    * @return resource
    */
    private function connection_id()
    {
        if (!isset(self::$connection_id))
        {
            if (! (self::$connection_id = pg_connect("host=localhost dbname=db user=use password=pass")) )
            {
                trigger_error("Ошибка соединения с базой данных PostgreSQL: ".pg_last_error(), E_USER_ERROR);
            }
       
            pg_set_client_encoding(self::$connection_id, "koi8-r"); // устанавлиаем кодировку клиента в соотвествии с кодировкой сайта
        }
   
        return self::$connection_id;
    }

    /**
    * Метод подготовки SQL запроса
    * @param unknown $query
    * @return boolean
    */
    public function prepare($query)
    {
        if (! pg_prepare($this->connection_id(), "", $query) )
        {
            trigger_error("Подготовка SQL запроса {$query} завершилось неудачно: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Выполняем подготовленный SQL запрос
    * @param array $params
    * @return app_db_pgsql
    */
    public function execute(array $params = array())
    {
        if (! ($this->_last_pg_query_resource = pg_execute($this->connection_id(), "", $params)) )
        {
            trigger_error("Выполнение ранее подгтовленного запроса произошло с ошибкой: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Получаем строку
    * @return array
    */
    public function fetch_row()
    {
        return pg_fetch_row($this->_last_pg_query_resource);
    }

    /**
    * Получаем строку (ассоциативный массив)
    * @return array
    */
    public function fetch_assoc()
    {
        return pg_fetch_assoc($this->_last_pg_query_resource);
    }


    /**
    * Выполняет SQL без предподготовки, но с параметрами
    * @param string $query
    * @param array $params
    * @return app_db_pgsql
    */
    public function query_params($query, array $params = array())
    {
        if (! ($this->_last_pg_query_resource = pg_query_params($this->connection_id(), $query, $params)) )
        {
            trigger_error("Выполнение запроса c параметрами произошло с ошибкой: ".pg_last_error($this->connection_id()), E_USER_ERROR);
        }
   
        return $this;
    }

    /**
    * Возвращает количество затронутых строк
    * @return number
    */
    public function num_rows()
    {
        return pg_num_rows($this->_last_pg_query_resource);
    }
}

Пробовал собственно так:

PHP:

public function getTwByCode($tw_code)
    {
        $pg = new app_db_pgsql();
        $pg->query_params("select * from type_of_work where tw_code = cast($1 as int8)", array($tw_code));
       
        if ($pg->num_rows() === 1)
        {
                return $pg->fetch_assoc();
        }
       return false;
    }

Валится с ошибкой , в случае плохого INT’а:

Код:

Warning: pg_query_params() [function.pg-query-params]: Query failed: ОШИБКА: неверное значение для целого числа: "a" in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 95

Fatal error: Выполнение запроса c параметрами произошло с ошибкой: ОШИБКА: неверное значение для целого числа: "a" in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 97

На PHP приводить к unsigned int не вариант (поскольку максимального значения для PHP-шного INT меньше чем bigint PostreSQL)

Последнее редактирование: 19 Май 2014

Активист


  • #3

Вот в чем проблема:

is_number не подойдет, ибо:

Код:

Warning: pg_query_params() [function.pg-query-params]: Query failed: ОШИБКА: значение "9223372036854775808" вне диапазона для типа bigint in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 95

Fatal error: Выполнение запроса c параметрами произошло с ошибкой: ОШИБКА: значение "9223372036854775808" вне диапазона для типа bigint in /var/www/x.web.local/httpdocs/x/app/db/pgsql.php on line 97

  • #4

preg_match() + сравнение строк.

  • #5

Подскажите, нужно безусловное приводение типов к int / decimal. Что бы не валилась ошибка…

А к какому числу это безусловное приведение должно приводить букву «a» или число за пределами диапазона int8?

  • #6

Вот кстати придумалось Элегантное Решение:

Код:

create function shit_to_integer(incoming_shit text, default_shit int8 default null)
returns int8
as $$
begin
  begin
    return incoming_shit::int8;
  exception
    when numeric_value_out_of_range or invalid_text_representation then
      return default_shit;
  end;
end;
$$ language plpgsql immutable called on null input security definer;

Соответственно shit_to_integer(‘a’) вернёт нам null, shit_to_integer(‘a’, 666) вернёт 666.

Активист


  • #7

А к какому числу это безусловное приведение должно приводить букву «a» или число за пределами диапазона int8?

Есть два варианта:
1. Передано не число;
2. Передано число за приделами.

MySQL приводит к пустоте (но не NULL), насколько я знаю. В MySQL проверка входных данных и генерация ошибок , подобных PG — это strict mode, который отключается.

1 — ое еще теститься на валидацию;
2 — ое уже нельзя проверить, в PHP.

За функцию спасибо)

Последнее редактирование: 20 Май 2014

Это мой код

select * from crosstab($$

**select code_r, code_o,case when tab3.count is null then 0 else tab3.count::bigint end from (
select r.code as code_r,o.id as organ_id_o,o.code as code_o from ref_crime_code r**

inner join ref_location_organ o on 1=1
where r.level =0 and r.type_id in (970)  order by code_o,code_r ) as tab1

left join (
select code_s,organ_id, count(*) from (
select  distinct on (aud.id)
case when c.level = 0 then c.code  when c1.level = 0 then c1.code else c2.code end as code_s,
organ_id

from erpp_aud aud
 inner join m2m_erpp_ref_crime_code mc on mc.erpp_id = aud.id
 inner join ref_crime_code c on c.id = mc.ref_crime_code_id and c.type_id in (970)

    left join ref_crime_code c1 on c1.id = c.parent_id
        left join ref_crime_code c2 on c2.id = c1.parent_id
where movement_point_id <> 399 and uid_suffix is null and movement_reason_id = 2010

order by aud.id,rev  desc, c.id
) as tab2 group by code_s,organ_id
) tab3 on tab1.code_r = tab3.code_s and tab1.organ_id_o = tab3.organ_id order by code_r::int,2
$$)

[22P02] ОШИБКА: неверное значение для целого числа: «119-1″ Где: SQL-оператор:
» select code_r, code_o,case when tab3.count is null then 0 else tab3.count::bigint end from ( select r.code as code_r,o.id as organ_id_o,o.code as code_o from ref_crime_code …

При попытке использовать команду COPY через SQL в Postgres 9.5.1 в простой примерной базе данных…

Я получаю эту ошибку:

ERROR:  invalid input syntax for integer: "Sally"
CONTEXT:  COPY customer_, line 2, column id_: "Sally"

********** Error **********

ERROR: invalid input syntax for integer: "Sally"
SQL state: 22P02
Context: COPY customer_, line 2, column id_: "Sally"

… При импорте этих данных в CSV (значения, разделенные запятыми):

"first_name_","last_name_","phone_","email_"
"Sally","Jones","425.555.1324","s.jones@acme.com"
"Jarrod","Barkley","206.555.3454","j.barkley@example.com"
"Wendy","Melvin","415.555.2343","wendy@wendyandlisa.com"
"Lisa","Coleman","425.555.7282","lisa@wendyandlisa.com"
"Jesse","Johnson","507.555.7865","j.j@guitar.com"
"Jean-Luc","Martin","212.555.2244","jean-luc.martin@example.com"

… Импортируется через следующий SQL, выполняемый в pgAdmin:

COPY customer_
FROM '/home/parallels/Downloads/customer_.csv'
CSV 
HEADER
;

… В эту таблицу:

-- Table: public.customer_

-- DROP TABLE public.customer_;

CREATE TABLE public.customer_
(
  id_ integer NOT NULL DEFAULT nextval('customer__id__seq'::regclass),
  first_name_ text NOT NULL,
  last_name_ text NOT NULL,
  phone_ text NOT NULL DEFAULT ''::text,
  email_ text NOT NULL DEFAULT ''::text,
  CONSTRAINT pkey_customer_ PRIMARY KEY (id_)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.customer_
  OWNER TO postgres;
COMMENT ON TABLE public.customer_
  IS 'Represents a person  whose pets visit our clinic.';

Кажется, первая строка, содержащая имена столбцов, обрабатывается успешно. Точкой отказа является первое значение данных в первой строке данных CSV. Ни один из моих импортированных данных не относится к целочисленному типу, поэтому сообщение об ошибке сбивает меня с толку. Единственное целое число — это первичный ключ id_, автоматически увеличивающийся SERIAL.

Я прочитал страницу вопроса на странице Ошибка PG COPY: недопустимый синтаксис ввода для целого числа. Но этот вопрос действительно касался целочисленных значений, а их отсутствие в пустой строке в кавычках интерпретировалось как NULL. В моем случае здесь у нас нет целых значений в данных; единственное целое число — это столбец первичного ключа SERIAL со сгенерированным значением DEFAULT (не в импортируемых данных).

Я также нашел вопрос, ОШИБКА PostgreSQL: недопустимый синтаксис ввода для целого числа. Но это кажется неуместным.

Понравилась статья? Поделить с друзьями:
  • Ошибка неверное выражение pascal abc
  • Ошибка не работает датчик кислорода
  • Ошибка неверно указана единица измерения word как убрать
  • Ошибка не пройдена капча
  • Ошибка неверно задано имя папки на windows 10