Самоучитель по SQL-сервер в Linux
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

В. Двоичный формат команды COPY

Выходные данные команды COPY могут сохраняться не только в текстовом, но и в двоичном формате PostgreSQL. С файлами, сохраненными в двоичном формате, невозможно работать в обычных текстовых редакторах.

Заголовок

Заголовок двоичного файла PostgreSQL состоит из фиксированного набора полей общей длиной 24 байта и расширенного заголовка переменной длины. Ниже перечислены фиксированные поля заголовка.

  • Сигнатура. 12-байтовая последовательность символов PGBCOPY\n\377\r\n\0. Сигнатура используется для идентификации файлов, искаженных при пересылке. Она изменяется при потере значений NULL, нарушении контроля четности, воздействии фильтров преобразования новой строки и потере старших битов.
  • Определитель порядка байтов. 4-байтовая целочисленная константа (0x01020304), при помощи которой предотвращается перестановка байтов в процессе чтения двоичных файлов.
  • Флаги. 4-байтовое целое число, содержащее информацию о формате файла. Поле состоит из набора флагов, а его биты нумеруются с 0 (младший бит) до 31 (старший бит). Для сохранения совместимости биты 0-15 зарезервированы, а в битах 16-31 хранятся флаги. В PostgreSQL 7.1.x определен только бит 16:
    • если бит 16 равен 1, в файле сохраняются идентификаторы объектов; о если бит 16 равен 0, идентификаторы объектов в файл не включаются.
  • Поле длины расширенного заголовка. 4-битовое целое поле, содержащее длину оставшейся части заголовка в байтах (без учета длины самого поля). В предыдущих версиях это поле было равно 0, и за ним непосредственно следовали данные первой записи.

Записи

Записи в двоичном файле начинаются с 16-разрядного целого количества полей (одинакового для каждой записи). Затем следует 16-разрядное целое поле typlen, после чего — поля данных. Допустимые значения поля typlen перечислены ниже.

  • 0. NULL; поле не содержит данных.
  • >0. Тип данных фиксированной длины. За словом typlen следует указанное количество байтов данных.
  • -1. Тип данных varlena. Следующие четыре байта составляют заголовок varlena, определяющий общую длину значения (вместе с длиной заголовка).
  • <—1. Зарезервировано для использования в будущем.

Чтобы приложение, читающее этот формат, могло легко проверить целостность двоичных данных, со всеми полями, отличными от NULL, ассоциируется значение typlen, которое может сравниваться с полем typlen приемного поля перед попытками вставки или обновления данных в PostgreSQL.

Некоторые параметры форматирования остались нереализованными; такое решение было принято для лучшей переносимости двоичных файлов. Следует упомянуть о невозможности хранения дополнительных данных между полями (например, посредством дополнения при выравнивании), а также об отсутствии различий между типами данных по способу передачи (по ссылке и по значению).

Если в двоичный файл PostgreSQL включаются идентификаторы объектов (OID), они следуют сразу же после поля-счетчика. При подсчете полей значения OID не учитываются.

Завершение

Двоичные файлы PostgreSQL завершаются простым 16-разрядным целым числом -1, за которым следует конец файла. Значение легко отличается от начального 16-разрядного счетчика полей, и это обстоятельство упрощает синхронизацию данных в приложениях.




Назад    Содержание    Вперед

508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.