PostgreSQL: Документация: 7.0: КОПИРОВАТЬ
Эта документация предназначена для неподдерживаемой версии PostgreSQL.
Вы можете просмотреть ту же страницу для
Текущий
версию или одну из других поддерживаемых версий, перечисленных выше.
Имя
COPY — Копирует данные между файлами и таблицамиКОПИРОВАТЬ [ДВОИЧНУЮ] таблицу [С OIDS] ОТ { 'имя файла' | стандартный ввод } [[USING] DELIMITERS 'разделитель' ] [ WITH NULL AS 'пустая строка' ] КОПИРОВАТЬ [ДВОИЧНУЮ] таблицу [С OIDS] К { 'имя файла' | стандартный вывод } [[USING] DELIMITERS 'разделитель' ] [ WITH NULL AS 'пустая строка' ]
Входы
- ДВОИЧНЫЕ
Изменяет поведение форматирования полей, заставляя все данные должны храниться или считываться в двоичном формате, а не как текст.
- стол
Имя существующей таблицы.
- С ОИДами
Копирует внутренний уникальный идентификатор объекта (OID) для каждого строка.
- имя файла
Абсолютный путь Unix к входу или выходу файл.
- стандартный
Указывает, что ввод поступает из канала или терминала.
- стандартный вывод
Указывает, что вывод направляется в канал или терминал.
- разделитель
Символ, ограничивающий ввод или вывод поля.
- нулевая печать
Строка для представления значений NULL. По умолчанию «\N» (обратная косая черта-N). Ты можешь например, предпочесть пустую строку.
Примечание: В копии любой элемент данных, который соответствует эта строка будет сохранена как значение NULL, поэтому вам следует убедитесь, что вы используете ту же строку, что и в скопировать.
Выходы
- КОПИРОВАТЬ
Копирование успешно завершено.
- ОШИБКА: причина
Сбой копирования по причине, указанной в ошибке сообщение.
Описание
COPY перемещает данные между таблицами Postgres и стандартной файловой системой. файлы. COPY предписывает серверной части Postgres напрямую читать или записать в файл. Файл должен быть непосредственно виден бэкенду. и имя должно быть указано с точки зрения бэкенда. Если указаны stdin или stdout, данные проходят через клиентский интерфейс к бэкенду.
Примечания
Ключевое слово BINARY заставит все данные сохраняться/читаться как двоичный формат, а не как текст. Это несколько быстрее, чем обычная команда копирования, но обычно не переносимая, а сгенерированные файлы несколько больше, хотя этот фактор сильно зависит от самих данных.
По умолчанию текстовая копия использует символ табуляции («\t») в качестве разделитель. Разделитель также может быть изменен на любой другой один символ с ключевой фразой USING DELIMITERS. Символы в полях данных, которые совпадают с разделителем символ будет заключен в кавычки с обратной косой чертой.
Вы должны иметь выбор доступа на любой таблица, значения которой считываются COPY , и либо вставить, либо обновить доступ к таблица, в которую значения вставляются КОПИРОВАТЬ . Серверная часть также нуждается в соответствующем Unix разрешения для любого файла, прочитанного или записанного COPY .
Ключевая фраза USING DELIMITERS указывает один символ, который будет использоваться для всех разделителей между столбцами. Если в строке-разделителе указано несколько символов, только используется первый символ.
Совет: Не путайте КОПИРОВАТЬ с инструкцией psql \копировать .
КОПИРОВАТЬ не вызывает ни правил, ни действий по умолчанию для столбцов. Однако он вызывает триггеры.
КОПИРОВАТЬ останавливает работу при первом ошибка. Это не должно привести к проблемам в случае COPY FROM , но целевое отношение будет, конечно, быть частично модифицированным в ЭКЗЕМПЛЯР ДО . ВАКУУМ следует использовать для очистки вверх после неудачной копии.
Поскольку текущий рабочий каталог серверной части Postgres обычно не совпадает с рабочим каталогом пользователя, результат копирования в файл «foo» (без дополнительной информации о пути) может привести к неожиданным результаты для наивного пользователя. В этом случае foo окажется в $PGDATA/foo. В общем, полное имя пути как казалось бы, серверная машина должна использоваться при указании копируемых файлов.
Файлы, используемые в качестве аргументов для КОПИРОВАТЬ , должны находиться на сервере базы данных или быть доступным для него посредством либо на локальных дисках, либо в сетевой файловой системе.
Когда соединение TCP/IP с одной машины на другую используется и указан целевой файл, целевой файл будет написано на машине, где работает серверная часть, а не машина пользователя.
Форматы файлов
Текстовый формат
Когда КОПИРОВАТЬ В используется без BINARY, сгенерированный файл будет иметь каждую строку (экземпляр) в одной строке, где каждый столбец (атрибут) разделен символ-разделитель. Встроенные символы-разделители будут предшествует символ обратной косой черты («\»). Значения атрибута сами являются строками, сгенерированными функцией вывода связанные с каждым типом атрибута. Выходная функция для type не должен пытаться генерировать символ обратной косой черты; это будет заниматься КОПИРОВАТЬ себя.
Фактический формат для каждого экземпляра:
...
oid помещается в начало строки, если WITH OIDS указано.
Если
Символ обратной косой черты имеет и другие специальные значения. А буквальный символ обратной косой черты представлен как два последовательных обратную косую черту («\\»). Литеральный символ табуляции представлен как обратная косая черта и табуляция. Буквальный символ новой строки представлен как обратную косую черту и новую строку.
При загрузке текстовых данных не созданный Postgres, вы необходимо преобразовать символы обратной косой черты («\») в двойная обратная косая черта («\\»), чтобы убедиться, что они загружены правильно.Двоичный формат
В случае COPY BINARY первый четыре байта в файле будут количеством экземпляров в файл. Если это число равно нулю, COPY Команда BINARY будет считываться до тех пор, пока не будет обнаружен конец файла. В противном случае он перестанет читать, когда это количество экземпляров был прочитан. Остальные данные в файле будут проигнорированы.
Формат каждого экземпляра в файле следующий. Примечание что этот формат должен соблюдаться точно . Четырехбайтовые целые числа без знака называются uint32 в таблице ниже.
Таблица 19-1. Содержимое файла бинарной копии
В начале файла | |
uint32 | количество кортежей |
Для каждого кортеж | |
uint32 | общая длина кортежа данные |
uint32 | oid (если указано) |
uint32 | число ноль атрибуты |
[uint32,. ..,uint32] | число атрибутов атрибуты, считая от 0 |
— | <данные кортежа> |
Выравнивание двоичных данных
На Sun-3 2-байтовые атрибуты выравниваются по двухбайтовым границы, а все более крупные атрибуты выровнены по четырехбайтовому границы. Атрибуты символов выравниваются по однобайтовым границы. На большинстве других машин все атрибуты больше 1 байт выравнивается по четырехбайтовым границам. Обратите внимание, что переменная атрибутам длины предшествует длина атрибута; массивы — это просто непрерывные потоки элемента массива тип.
Использование
В следующем примере таблица копируется на стандартный вывод с использованием вертикальная черта («|») в качестве разделителя полей:
КОПИРОВАТЬ страну В стандартный вывод, ИСПОЛЬЗУЯ РАЗДЕЛИТЕЛИ '|';
Чтобы скопировать данные из файла Unix в таблицу «страна»:
СКОПИРОВАТЬ страну ИЗ '/usr1/proj/bray/sql/country_data';
Вот пример данных, пригодных для копирования в таблицу из стандартного ввода (поэтому он имеет окончание последовательность в последней строке):
АФ АФГАНИСТАН АЛЬ АЛБАНИЯ DZ АЛЖИР . .. ЗМ ЗАМБИЯ ZW ЗИМБАБВЕ \.
Те же данные, выведенные в двоичном формате на Linux/i586 машина. Данные показаны после фильтрации через Unix утилита od -c . Таблица имеет три поля; первый — char(2), а второй — текст. Все строки имеют нулевое значение в третьем поле. Обратите внимание, как поле char(2) дополняется нулями до четырех байтов. а перед текстовым полем указывается его длина:
355 \0 \0 \0 027 \0 \0 \0 001 \0 \0 \0 002 \0 \0 \0 006 \0 \0 \0 A F \0 \0 017 \0 \0 \0 A F G H А Н И С Т А Н 023 \0 \0 \0 001 \0 \0 \0 002 \0 \0 \0 006 \0 \0 \0 А Л \0 \0 \v \0 \0 \0 А Л Б А Н И А 023 \0 \0 \0 001 \0 \0 \0 002 \0 \0 \0 006 \0 \0 \0 D Z \0 \0 \v \0 \0 \0 A L Г Е Р И А ... \n \0 \0 \0 Z A M B I A 024 \0 \0 \0 001 \0 \0 \0 002 \0 \0 \0 006 \0 \0 \0 Z W \0 \0 \f \0 \0 \0 Z I M B A B W E
Совместимость
SQL92
Нет оператора COPY в SQL92.
pgadmin 4 — Функция копирования Postgresql с сервера на клиентский компьютер
Задавать вопрос
спросил
Изменено 1 год, 1 месяц назад
Просмотрено 415 раз
Я хочу импортировать таблицу с сервера на компьютер-клиент с помощью команды копирования. Я знаю, что это повторяющаяся проблема для пользователей, но я не смог получить ответ на этот конкретный вопрос, и это также другой сценарий, и я считаю, что это распространено.
Я использовал команду копирования, чтобы скопировать таблицу с сервера на клиентский компьютер, используя приведенный ниже код:
КОПИРОВАТЬ (Выберите * из Table_Name) TO 'C:\somedirectory\file.csv' DELIMITER ',' CSV HEADER;
Однако я получил следующие
ОШИБКА: относительный путь не разрешен для копирования в файл
Мой вопрос: как использовать правильную команду COPY для копирования с сервера на клиентский компьютер в Postgres.
Спасибо в ожидании
- postgresql
- pgadmin-4
- postgresql-copy
- Пожалуйста, проверьте, есть ли у вашего пользователя доступ на чтение/запись к папке назначения.
- Это одна тема, которую я нашел, посмотрите, поможет ли она
https://dba.