Заявление COPY в PostgreSQL - PullRequest
       16

Заявление COPY в PostgreSQL

0 голосов
/ 03 января 2012

Используя оператор COPY PostgreSQL, мы можем загрузить данные из текстового файла в таблицу базы данных, как показано ниже:

COPY CME_ERROR_CODES FROM E'C:\\Program Files\\ERROR_CODES\\errcodes.txt' DELIMITER AS '~'

Вышеприведенный оператор выполняется с компьютера, на котором установлен postgresqlклиент, где в качестве сервера находится в другой машине Windows.Запуск вышеприведенного заявления жалуется мне, что ERROR: could not open file "C:\Program Files\ERROR_CODES\errcodes.txt" for reading: No such file or directory.

После некоторых исследований я заметил, что оператор COPY ищет файл загрузчика (errcodes.txt) на компьютере сервера postgresql по тому же пути (C: \ Program Files \ ERROR_CODES).Чтобы проверить это, я создал ту же структуру папок на компьютере сервера postgresql и сохранил там файл errcodes.txt.Тогда заявление COPY сработало хорошо.Это выглядит очень жестким ограничением для меня с заявлением COPY.Есть ли какие-либо настройки, необходимые, чтобы избежать этого?или это поведение оператора COPY?Я не нашел никакой информации в документах PostgreSQL.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

вот стандартное решение:

COPY foo (i, j, k) FROM stdin;
1<TAB>2<TAB>3
\.

Данные должны быть надлежащим образом экранированы и разделены табуляцией.

На самом деле, это в документах, даже в определении грамматики у вас есть STDIN... См .: http://www.postgresql.org/docs/9.1/static/sql-copy.html

Если вы используете какой-либо язык программирования с поддержкой COPY, у вас будет pg_putcopy или аналогичная функция.Так что вам не нужно беспокоиться о экранировании и конкатенации.

Советы, как сделать это вручную в Python -> Создание Postgres COPY непосредственно в Python?

The Perlпуть -> http://search.cpan.org/dist/DBD-Pg/Pg.pm#COPY_support

Надеюсь, это поможет.

0 голосов
/ 03 января 2012

Из документации

Цитата: COPY с именем файла указывает серверу PostgreSQL непосредственно выполнять чтение или запись в файл. Файл должен быть доступен для сервера, а имя должно быть указано с точки зрения сервера. Если указано STDIN или STDOUT, данные передаются через соединение между клиентом и сервером.

Если вы хотите скопировать файл с локального компьютера на сервер, используйте команду \ copy.

...