Добавление данных командами INSERT и COPY
При работе с входными файлами в формате ASCII в секции DELIMITERS передается символ, используемый в качестве разделителя значений полей в строках файла. Если разделитель не указан, PostgreSQL считает, что значения разделяются символом табуляции. Необязательная секция WITH NULL определяет формат, в котором передаются значения NULL. Если секция отсутствует, PostgreSQL интерпретирует последовательность \N как NULL (например, пустые поля исходного файла по умолчанию интерпретируются как пустые строковые константы, а не как NULL).
Если данные вводятся вручную или передаются терминалу другой программой, в качестве источника в секции FROM можно указать стандартный ввод (stdin). При получении данных из стандартного ввода входной поток должен завершаться последовательностью \. (обратная косая черта плюс точка), за которой немедленно следует символ новой строки.
В листинге 4.19 приведено содержимое файла, выведенного PostgreSQL в формате ASCII. Поля разделяются запятыми, а для представления NULL используется строка \null.B файле сохранены данные из таблицы subjects базы данных booktown.
Листинг 4.19. Пример копируемого ASCII-файла.
1.Business.Productivity Ave 2.Children's Books,Kids Ct 3.Classics.Academic Rd 4.Computers,Productivity Ave 5.Cooking.Creativity St 12.Religion.\null 8.Hi story.Academic Rd 9.Horror.Black Raven Dr 10.Mystery.Black Raven Dr 11.Poetry.Sunset Dr 13.Romance.Main St 14.Science.Productivity Ave 15.Science Fiction.Main St 0.Arts.Creativity St 6.Drama.Main St 7.Entertainment.Main St
Следующая команда (листинг 4.20) импортирует содержимое файла /tmp/ subjects.sql в таблицу subjects базы данных booktown.
Листинг 4.20. Копирование ASCII-файла.
booktown=# COPY subjects FROM '/tmp/subjects.sql' booktown-# USING DELIMITERS '.' WITH NULL AS '\null; COPY
Двоичный формат
Команда COPY также позволяет выполнять операции ввода и вывода с данными в двоичном формате. Если команда COPY FROM содержит ключевое слово BINARY, входной файл должен быть создан командой COPY TO в двоичном формате PostgreSQL. Двоичные файлы загружаются быстрее ASCII-файлов, но в отличие от последних их нельзя читать и редактировать в простых текстовых редакторах.
В листинге 4.21 приведена команда COPY, предназначенная для вставки записей из двоичного файла в таблицу subjects базы данных booktown.
Листинг 4.21. Копирование двоичного файла.
booktown=# COPY BINARY subjects FROM '/tmp/subjects.sql'; COPY