write_dump¶
- PGPackDumper.write_dump(
- fileobj,
- table_name,
- )
- Параметры:
fileobj (BufferedReader) – Файловый объект с данными дампа
table_name (str) – Имя целевой таблицы в PostgreSQL/GreenPlum
- Исключение:
PGPackDumperWriteError – Ошибки записи данных
Запись данных из PGPack формата дампа в таблицу PostgreSQL/GreenPlum.
Описание:
Метод выполняет загрузку данных из PGPack формата дампа в указанную таблицу PostgreSQL/GreenPlum. Использует COPY протокол для потоковой передачи данных, обеспечивая высокую производительность при работе с большими объемами данных.
Основные этапы работы:
Инициализация буфера - настройка имени целевой таблицы в copy_buffer
Чтение PGPack файла - создание PGPackReader для обработки формата
Извлечение метаданных - получение информации о структуре данных из дампа
Логирование диаграммы передачи - отображение информации о source и destination
Потоковая загрузка - передача данных через COPY протокол
Фиксация транзакции - выполнение commit() для сохранения данных
Очистка ресурсов - закрытие reader и обновление соединения
Параметры:
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Обязательный. Файловый объект, открытый в бинарном режиме чтения, содержащий дамп в PGPack формате. |
|
|
Обязательный. Имя таблицы в PostgreSQL/GreenPlum, куда будут загружены данные. Формат: |
Примеры использования:
# Пример 1: Базовая загрузка дампа
from pgpack_dumper import PGPackDumper, PGConnector
connector = PGConnector(host="localhost", port=5432, dbname="mydb")
dumper = PGPackDumper(connector=connector)
with open("data_dump.pgpack", "rb") as f:
dumper.write_dump(
fileobj=f,
table_name="public.user_events"
)
# Пример 2: Загрузка в таблицу в конкретной схеме
with open("products_dump.pgpack", "rb") as f:
dumper.write_dump(
fileobj=f,
table_name="inventory.products"
)
# Пример 3: Загрузка из различных источников
import gzip
# Загрузка из сжатого файла
with gzip.open("compressed_dump.pgpack.gz", "rb") as f:
dumper.write_dump(
fileobj=f,
table_name="archive.old_data"
)
Обработка ошибок и валидация:
# Пример 1: Обработка ошибок загрузки
try:
with open("data.pgpack", "rb") as f:
dumper.write_dump(f, table_name="nonexistent.table")
except PGPackDumperWriteError as e:
print(f"Ошибка записи: {e}")
# Возможные причины: таблица не существует, несоответствие структуры данных
# Пример 2: Проверка существования файла
import os
file_path = "data.pgpack"
if not os.path.exists(file_path):
print(f"Файл {file_path} не существует")
else:
with open(file_path, "rb") as f:
try:
dumper.write_dump(f, table_name="import.data")
except PGPackDumperWriteError as e:
print(f"Ошибка: {e}")
Метаданные и логирование:
Метод автоматически извлекает и логирует метаданные:
Источник (Source): Информация о файле дампа
Назначение (Destination): Информация о целевой базе данных и таблице
Диаграмма передачи: Визуальное представление процесса передачи данных
Пример вывода в лог: .. code-block:: text
INFO: file:data_dump.pgpack → mydb:public.user_events INFO: Connection to host localhost updated.
Особенности и рекомендации:
COPY протокол: Используется для максимальной производительности загрузки данных
Автоматический commit: Транзакция фиксируется автоматически после успешной загрузки
Обновление соединения: После загрузки вызывается
refresh()для обновления курсораСборка мусора: Используется
collect()для освобождения памяти после чтения данныхЗакрытие ресурсов: PGPackReader автоматически закрывается после использования
Требования к данным:
Структурное соответствие: Структура данных в дампе должна соответствовать целевой таблице
Типы данных: Типы данных в дампе должны быть совместимы с типами в таблице
Кодировка: Данные должны быть в корректной кодировке для базы данных
Ограничения: Данные должны удовлетворять ограничениям таблицы (NOT NULL, UNIQUE и т.д.)
Производительность:
Потоковая обработка: Данные обрабатываются потоково, не загружая весь файл в память
Буферизация: Используется эффективная буферизация данных
Сжатие: Поддерживается сжатие данных в PGPack формате (ZSTD, LZ4, NONE)
Примечания:
Таблица должна существовать в базе данных перед загрузкой
Пользователь должен иметь права на запись в целевую таблицу
Метод работает в рамках транзакции, которая автоматически фиксируется
Для отката изменений при ошибках используйте внешнюю транзакцию
Поддерживаются как PostgreSQL, так и GreenPlum
См. также:
read_dump - Создание дампа из PostgreSQL/GreenPlum
PGPackReader- Класс для чтения PGPack форматаCopyBuffer- Буфер для операций COPYtransfer_diagram - Функция логирования передачи данных
metadata_reader - Извлечение метаданных из буфера
make_columns - Создание описания колонок