Sql

Postgresql copy: PostgreSQL: Documentation: 15: COPY

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 указано.

Если

COPY отправляет свой вывод на стандартный вывод вместо файла, он отправит обратную косую черту («\») и точку («.»), за которой сразу следует новая строка, в отдельной строке, когда это будет сделано. Точно так же, если КОПИРОВАТЬ читает со стандартного ввода, это будет ожидать обратную косую черту («\») и точку («».»), за которой следует новая строка, как первые три символа в строке для обозначения конец файла. Однако COPY будет завершить (за которым следует сам бэкэнд), если истинный EOF встречается до того, как этот специальный шаблон конца файла будет найденный.

Символ обратной косой черты имеет и другие специальные значения. А буквальный символ обратной косой черты представлен как два последовательных обратную косую черту («\\»). Литеральный символ табуляции представлен как обратная косая черта и табуляция. Буквальный символ новой строки представлен как обратную косую черту и новую строку.

При загрузке текстовых данных не созданный 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
  1. Пожалуйста, проверьте, есть ли у вашего пользователя доступ на чтение/запись к папке назначения.
  2. Это одна тема, которую я нашел, посмотрите, поможет ли она

https://dba.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *