Ваше утверждение подозрительно:
COPY data FROM 'data.dat' USING DELIMITERS ',' CSV;
DELIMITERS
использовался в версиях до 7.3 . Это все еще поддерживается, чтобы не сломать старый код, но не использовать его больше. Правильное ключевое слово - DELIMITER
. И вам вообще не нужно указывать ,
, так как это значение по умолчанию для FORMAT CSV
.
Также я цитирую руководство здесь :
имя файла
Абсолютный путь входного или выходного файла. Пользователям Windows может потребоваться использовать строку E''
и удвоить все обратные слеши, используемые в имени пути.
Смелый акцент мой. Замените 'data.dat'
на что-то вроде '/path/to/data.dat'
в UNIX или E'C:\\path\\to\\data.dat'
в Windows.
Для версий 7.3+ используйте:
COPY data FROM '/path/to/data.dat' CSV
Для версий 9.0+ используйте:
COPY data FROM '/path/to/data.dat' (FORMAT CSV)
Если вы все еще получаете эту ошибку:
ERROR: invalid input syntax for type numeric:
CONTEXT: COPY data, line 13, column interval_2400:
Тогда, очевидно, исходный файл не соответствует структуре таблицы data
. Посмотрите на ваш исходный файл, перейдите к строке 13 и посмотрите, какое значение есть для столбца interval_2400
. Скорее всего, это не числовой. В частности, empty string
(''
) не допускается в столбцах числового типа.
Вы можете исправить исходный файл или адаптировать определение таблицы :
ALTER TABLE data ALTER COLUMN interval_2400 TYPE text;
Или любой другой тип, более подходящий. Может быть interval
, судя по названию. (Но text
принимает почти любые входные значения.)
Или, что еще лучше, создайте измененный временный файл, COPY
к нему, исправьте ошибочные значения, затем вставьте в целевую таблицу, преобразуя ее из текста. См: