Резервное копирование PostgreSQL в Python: методы и примеры кода

Чтобы выполнить резервное копирование PostgreSQL с помощью Python, существует несколько методов. Вот несколько часто используемых подходов:

  1. Использование утилиты pg_dump:
    Вы можете запустить утилиту pg_dumpиз вашего скрипта Python с помощью подпроцессамодуль. Эта утилита позволяет создать логическую резервную копию вашей базы данных PostgreSQL.

    import subprocess
    def backup_postgresql(host, port, username, password, database, output_file):
       command = f'pg_dump -h {host} -p {port} -U {username} -W -F c -b -v -f {output_file} {database}'
       subprocess.call(command, shell=True)
    # Example usage
    backup_postgresql('localhost', '5432', 'myuser', 'mypassword', 'mydatabase', 'backup.dump')
  2. Использование библиотеки psycopg2.
    Библиотека psycopg2 — это популярный адаптер PostgreSQL для Python. Вы можете использовать его, чтобы установить соединение с вашей базой данных и выполнить резервное копирование, выполнив запрос SQL.

    import psycopg2
    def backup_postgresql(host, port, username, password, database, output_file):
       conn = psycopg2.connect(host=host, port=port, user=username, password=password, database=database)
       cursor = conn.cursor()
       with open(output_file, 'wb') as f:
           cursor.copy_expert(f"COPY (SELECT * FROM {database}) TO STDOUT WITH BINARY", f)
       cursor.close()
       conn.close()
    # Example usage
    backup_postgresql('localhost', '5432', 'myuser', 'mypassword', 'mydatabase', 'backup.dump')
  3. Использование библиотеки pg8000.
    Библиотека pg8000— это еще один адаптер PostgreSQL для Python, который предоставляет интерфейс чистого Python для взаимодействия с базой данных. Вы можете использовать его для резервного копирования.

    import pg8000
    def backup_postgresql(host, port, username, password, database, output_file):
       conn = pg8000.connect(host=host, port=port, user=username, password=password, database=database)
       cursor = conn.cursor()
       with open(output_file, 'wb') as f:
           cursor.copy_to(f, f"SELECT * FROM {database}")
       cursor.close()
       conn.close()
    # Example usage
    backup_postgresql('localhost', '5432', 'myuser', 'mypassword', 'mydatabase', 'backup.dump')