2015-06-27 3 views
0

Я очень близок к решению большой проблемы, которая возникает у меня сейчас, и это последний бит. Я просто не знаю, почему вывод отличается от того, что находится в базе данных, когда я нуждаюсь в этом ТОЧНО.Я не понимаю это ~ Почему COPY меняет выход? (PGPLSQL)

Считывание данных перед входом в базу данных:

[NULL][NULL][NULL][SO][etc.......] 

Чтение данных из COPY в текстовый файл:

\\000\\000\\000\\016[etc...} (it matches, basically) 

Чтение данных после COPY двоичном формате

PGCOPY 
ÿ 
[NULL][NULL][NULL][EOT][etc.......] (first line changes a fair bit) 
(rest of the data stays exactly the same.) 
˜ÿÿ 

Запрос postgresql выполняется для теста:

COPY (SELECT byteacolumn FROM tablename WHERE id = 1) TO 'C:\path\file' (format:Binary); 

Так что использование двоичного формата дает мне почти то, что мне нужно, но не совсем. Я мог бы проигнорировать добавленные строки, но я не знал бы, какова должна быть первая строка данных.

TL;COPY добавляет строки и меняет первый ряд моих данных. Как я могу остановить его? :(

ответ

2

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

После первых двух строк, следующие 9 байты также входят в заголовок. Следующие 2 байта дают количество полей в следующей записи, а следующие 4 байта дают количество байтов в следующем поле. Только тогда начинаются фактические данные.

Полный детали формата можно найти в documentation, но имейте в виду, что они могут измениться в будущей версии.

(Однако, если предположить, что это та самая проблема, о которой вы спрашивали о here, я думаю, что это неправильный путь. Вы были на правильном пути с lo_import/lo_export.)

Смежные вопросы