PGCopyReader

class PGCopyReader(file, pgtypes=[])
Параметры:
  • file (BufferedReader) – Файловый объект с бинарными данными PGCOPY

  • pgtypes (list[PGOid]) – Список OID типов данных колонок (опционально)

Основной класс для чтения бинарного формата PGCOPY.

Описание:

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

Алгоритм работы:

  1. Проверка сигнатуры файла (PGCOPY\n\xff\r\n\x00)

  2. Чтение флагов и заголовка

  3. Определение количества колонок

  4. Инициализация функций чтения для типов данных

  5. Последовательное чтение записей

Атрибуты:

num_columns: int

Количество колонок в данных.

num_rows: int

Количество строк в данных.

postgres_dtype: list[PostgreSQLDtype]

Список типов данных для каждой колонки.

is_oid_enable: bool

Флаг включения OID в заголовке.

Методы:

read_row()
Результат:

Генератор значений одной строки

Тип результата:

Generator[Any, None, None]

Чтение одной строки данных построчно по колонкам.

to_rows()
Результат:

Генератор списков строк

Тип результата:

Generator[list[Any], None, None]

Чтение всех строк данных.

tell()
Результат:

Текущая позиция в файле

Тип результата:

int

Получение позиции чтения.

close()

Закрытие файлового объекта.

Строковое представление:

При выводе в консоли показывает таблицу с информацией о колонках:

<PGCopy dump reader>
┌─────────────────┬─────────────────┐
│ Column Number   │ PostgreSQL Type │
╞═════════════════╪═════════════════╡
│ Column_0        │ int4            │
├─────────────────┼─────────────────┤
│ Column_1        │ text            │
└─────────────────┴─────────────────┘
Total columns: 2
Total rows: 1000

Особенности:

  • Автоматическая обработка заголовка бинарного формата

  • Поддержка как типизированного, так и сырого чтения

  • Потоковое чтение больших объемов данных

  • Корректная обработка массивов и сложных типов

Использование:

Для импорта данных из бинарных дампов PostgreSQL/Greenplum.