Advanced

Перенос данных в RDS для PostgreSQL с использованием psql

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Подготовка к миграции данных

PostgreSQL поддерживает логические бэкапы. Вы можете использовать pg_dump функцию логического бэкапа для экспорта файлов бэкапа и последующего импорта их в RDS с использованием psql.

Вы можете получить доступ RDS экземпляры DB через EIP или через ECS.

Подготовка

  1. Подготовьте ECS для доступа к экземплярам DB в том же VPC или подготовьте устройство для доступа RDS через EIP.
    • Чтобы подключиться к экземпляру DB через ECS, вам нужно создать ECS сначала.
  2. Установите клиент PostgreSQL на подготовленный ECS или устройство.
    Note

    Версия клиента PostgreSQL должна совпадать с версией DB engine вашего экземпляра RDS for PostgreSQL. База данных PostgreSQL или клиент предоставят pg_dump и psql.

Экспорт данных

Перед миграцией существующей базы данных PostgreSQL в RDS, вам нужно сначала экспортировать данные.

Notice
  • Экспортный инструмент должен соответствовать версии DB engine.
  • Миграция базы данных выполняется в офлайн‑режиме. Перед миграцией необходимо остановить все приложения, использующие исходную базу данных.
  1. Войдите в ECS или устройство, которое может получить доступ RDS.
  2. Используйте инструмент pg_dump для экспорта исходной базы данных в файл SQL.

    pg_dump--username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE><DB_NAME>

    • DB_USER указывает имя пользователя базы данных.
    • DB_ADDRESS указывает адрес базы данных.
    • DB_PORT указывает порт базы данных.
    • BACKUP_FILE указывает имя файла, в который будут экспортированы данные.
    • DB_NAME указывает название базы данных, которую необходимо перенести.

    Введите пароль к базе данных, как запрошено.

    Note

    Если экспортированный SQL‑файл использует INSERT‑операторы, вы можете легко редактировать и изменять файл. Однако скорость импорта данных может быть медленнее, чем при использовании COPY‑операторов. Рекомендуется выбрать подходящий формат операторов по необходимости.

    Для получения дополнительной информации смотрите pg_dump options.

    Примеры:

    • Пример 1: Экспорт исходной базы данных в файл SQL (COPY)

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db

      Пароль для пользователя root:

    • Пример 2: Экспорт исходной базы данных в файл SQL (INSERT)

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --inserts --file=backup.sql my_db

      Пароль для пользователя root:

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

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --schema-only --file=backup.sql my_db

      Пароль для пользователя root:

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

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --data-only --file=backup.sql my_db

      Пароль для пользователя root:

    После выполнения команд в любом из приведённых выше примеров, a backup.sql файл будет сгенерирован следующим образом:

    [rds@localhost ~]$ ll backup.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql

  3. Используйте pg_dump для экспорта таблиц из исходной базы данных в файл SQL.

    pg_dump --username=<DB_USER> --host=<DB_ADDRESS> --port=<DB_PORT> --format=plain --file=<BACKUP_FILE> <DB_NAME> --table=<TABLE_NAME>

    • DB_USER указывает имя пользователя базы данных.
    • DB_ADDRESS указывает адрес базы данных.
    • DB_PORT указывает порт базы данных.
    • BACKUP_FILE указывает имя файла для экспорта.
    • DB_NAME указывает имя базы данных для миграции.
    • TABLE_NAME указывает имя указанной таблицы в базе данных для миграции.

    Введите пароль к базе данных по запросу.

    Примеры:

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

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test

      Пароль для пользователя root:

    • Пример 2: Экспорт нескольких таблиц из исходной базы данных в файл SQL

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=test1 --table=test2

      Пароль для пользователя root:

    • Пример 3: Экспорт всех таблиц, начинающихся с ts_, из исходной базы данных в файл SQL

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db --table=ts_*

      Пароль для пользователя root:

    • Пример 4: Экспорт всех таблиц, кроме тех, которые начинаются с ts_, из исходной базы данных в файл SQL

      $ pg_dump --username=root --host=192.168.151.18 --port=5432 --format=plain --file=backup.sql my_db -T=ts_*

      Пароль для пользователя root:

    После выполнения команд в любом из приведённых выше примеров, a backup.sql файл будет создан следующим образом:

    [rds@localhost ~]$ ll backup.sql
    -rw-r-----. 1 rds rds 2714 Sep 21 08:23 backup.sql

Импорт данных

  1. Войдите в ECS или устройство, которое может получить доступ RDS.
  2. Убедитесь, что целевая база данных, в которую будут импортированы данные, существует.

    Если целевая база данных не существует, выполните следующую команду для создания базы данных:

    # psql --host=<RDS_ADDRESS>--port=<DB_PORT>--username=root--dbname=postgres-c "создать базу данных<DB_NAME>;"

    • RDS_ADDRESS указывает IP-адрес экземпляра RDS DB.
    • DB_PORT указывает порт экземпляра RDS DB.
    • DB_NAME указывает имя базы данных для импорта.

  3. Импортировать экспортированный файл в RDS.

    # psql --host=<RDS_ADDRESS> --port=<DB_PORT>--username=root--dbname=<DB_NAME>--file=<BACKUP_DIR>/backup.sql

    • RDS_ADDRESS указывает IP-адрес RDS экземпляр DB.
    • DB_PORT указывает порт экземпляра RDS DB.
    • DB_NAME указывает название базы данных, в которую должны быть импортированы данные. Убедитесь, что база данных существует.
    • BACKUP_DIR указывает каталог, где backup.sql файл хранится.

    Введите пароль для RDS экземпляра БД, когда будет запрошено.

    Пример:

    # psql --host=172.16.66.198 --port=5432 --username=root --dbname=my_db --file=backup.sql

    Пароль для пользователя root:

  4. Просмотрите результат импорта.

    my_db=> \l my_db

    В этом примере база данных с именем my_db была импортирована.

    my_db=> \l my_db
    List of databases
    Name | Owner | Encoding | Collate | Ctype | Access privileges
    ------+-------+----------+-------------+-------------+-----------
    my_db | root | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    (1 row)