PostgreSQL: создание файла .sql для быстрой вставки данных в таблицу. - PullRequest
0 голосов
/ 10 февраля 2012

Я работаю над проектом, в котором мне нужно проанализировать несколько файлов .csv, всех разных форматов и содержащих различные виды данных, через некоторые функции C ++. После этого я извлекаю данные из файлов и создаю файл .sql, который можно импортировать в psql для вставки данных в базу данных PostgreSQL на более позднем этапе.

Но я не могу определить правильный синтаксис для файла .sql. Вот пример таблицы и пример файла .sql, воспроизводящие те же ошибки, которые я получаю:

Код создания таблицы:

CREATE TABLE "Sample_Table"
(
  "Col_ID" integer NOT NULL,
  "Col_Message" character varying(50),
  CONSTRAINT "Sample_Table_pkey" PRIMARY KEY ("Col_ID" )
)

inserttion.sql (после строки копирования поля разделены одним символом табуляции)

copy Sample_Table (Col_ID, Col_Message) from stdin;
1   This is Spaaarta
2   Why So Serious
3   Baazinga
\.

Теперь, если я выполняю вышеуказанный файл sql, я получаю следующую ошибку:

ERROR:  syntax error at or near "1"
LINE 2: 1 This is Spaaarta
        ^


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

Если это может помочь, я запускаю выпуск PostgreSQL 9.1, и все вышеупомянутые запросы выполнялись с помощью программного обеспечения PGAdmin III.

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

PgAdmin не поддерживает выполнение команд COPY так же, как psql (или, по крайней мере, в прошлый раз, когда я пробовал его с версией 1.14)Используйте psql для выполнения сценария или используйте операторы INSERT.

1 голос
/ 10 февраля 2012

Три вещи для проверки:

  • На самом деле между столбцами есть ровно одна табуляция символов? Пробелы запрещены.

  • Есть ли еще сообщения об ошибках? Я скучаю по по крайней мере один. (См. Ниже)

  • Когда вы вводите имена таблиц и столбцов с учетом регистра, вы должны делать это последовательно. Поэтому вы должны написать это:

copy "Sample_Table" ("Col_ID", "Col_Message") from stdin;

В противном случае вы получите эти ошибки:

psql:x.sql:1: ERROR:  relation "sample_table" does not exist
psql:x.sql:5: invalid command \.
psql:x.sql:5: ERROR:  syntax error at or near "1"
LINE 1: 1 This is Spaaarta
        ^

С этими вещами я могу успешно использовать данные вашего примера.

РЕДАКТИРОВАТЬ Изменение ошибки: у спрашивающего теперь есть

ERROR: invalid input syntax for integer: "1 'This is Spaaarta'"

Так что с 1 что-то не так.

Я предполагаю, что это проблема кодирования. Windows с UTF-16 может быть виновником здесь.

Отладка такого рода проблем в других интернет-ресурсах не легка, потому что многие полу-интеллектуальные программы стоят в очереди, большинству из них нравится настраивать «несколько» вещей.

Но сначала проверьте несколько вещей в psql:

\encoding
show client_encoding;
show server_encoding;

Согласно данным пастбина они должны быть одинаковыми и иметь одно из следующих значений: «SQL_ASCII», «LATIN1» или «UTF-8».

Если они уже есть или их настройка не помогает: в Unix / Linux / cygwin есть программа hexdump -C x.sql, отправьте ее вывод в pastebin. НЕ ИСПОЛЬЗУЙТЕ hexdump из любого редактора Windows, такого как ultraedit - меня несколько раз одурачили. При передаче файла в Linux обязательно используйте двоичную передачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...