Попытка разобраться в формате двоичного копирования Postgres в C #

2

Рассмотрим следующий текст из документации PostgreSQL при двоичном копировании:

11-байтовая последовательность PGCOPY\n\377\r\n\0 - обратите внимание, что нулевой байт является обязательным часть подписи. (Подпись предназначена для идентификация файлов, которые были замачивается не-8-битным чистым переносом. Эта подпись будет изменена фильтры перевода конца строки, сбросил нулевые байты, сбросил высокие бит, или изменения четности.)

Я могу создать остальную часть заголовка ok, но что подразумевается под \377? Я думал, что наибольшее значение, которое вы могли бы иметь в одном байте, было 256?

Кроме того, в примере:

0000000   P   G   C   O   P   Y  \n 377  \r  \n  \0  \0  \0  \0  \0  \0
0000020  \0  \0  \0  \0 003  \0  \0  \0 002   A   F  \0  \0  \0 013   A
0000040   F   G   H   A   N   I   S   T   A   N 377 377 377 377  \0 003
0000060  \0  \0  \0 002   A   L  \0  \0  \0 007   A   L   B   A   N   I
0000100   A 377 377 377 377  \0 003  \0  \0  \0 002   D   Z  \0  \0  \0
0000120 007   A   L   G   E   R   I   A 377 377 377 377  \0 003  \0  \0
0000140  \0 002   Z   M  \0  \0  \0 006   Z   A   M   B   I   A 377 377
0000160 377 377  \0 003  \0  \0  \0 002   Z   W  \0  \0  \0  \b   Z   I
0000200   M   B   A   B   W   E 377 377 377 377 377 377

Что представляют собой те же самые значения 377, поскольку я интерпретирую формат, они не должны быть \0's?

Если кто-то может помочь с остальной частью формата, это будет оценено. Я мог обмануть и использовать копию базы данных CVS, но с количеством строк, которые мне нужно скопировать (в миллионах), я понимаю, что бинарный формат будет иметь много преимуществ по скорости по сравнению с CVS.

  • 1
    «но с количеством строк, которые мне нужно скопировать (в миллионах), я понимаю, что двоичный формат будет иметь много преимуществ по скорости перед CVS». Если вам нужно сделать это снова, конечно, это будет. Но если вам нужно сделать это только один раз, вероятно, будет проще запустить медленный дамп, чем тратить время на внедрение более быстрого формата.
Теги:

2 ответа

4
Лучший ответ

\377 - восьмеричное значение - его десятичное значение - 255. Было ли что-то еще в том формате, который вас специально смутил?

  • 0
    это отвечает ЛОТУ, особенно относительно того, почему, например, '013' была длиной а значением, но на самом деле была меньше, чем длина. Это имеет больше смысла. Благодарю.
1

В основном вы не получите значительного ускорения, используя двоичный формат. Он имеет разные преимущества, но загрузка данных быстрее не является одним из них.

Просто используйте стандартные команды csv и COPY, и вы должны быть в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню