Скопируйте только ключи ограничений из одной базы данных в другую в pgAdmin

У меня есть два сервера (и две базы данных, каждая с сервера на pgAdmin):

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

Две базы данных имеют одинаковые таблицы: 9 таблиц в первой и те же 9 таблиц во второй.

Но на тестовом сервере у меня есть ключи ограничений (проверочные, внешние, уникальные, не нулевые), которые я протестировал и готов к развертыванию на сервере 2.

Как я могу скопировать только эти ограничения?

Большое спасибо.


person Mamba    schedule 22.01.2018    source источник


Ответы (1)


Самый простой способ сделать это - использовать инструмент командной строки pg_dump, который включен во все установки PostgreSQL.

  • Создайте резервную копию целевой базы данных:
    $ pg_dump -h /var/run/postgresql/ -d prod -Fd -f prod.pg_dump

  • Создайте резервную копию схемы исходной базы данных:
    $ pg_dump -h /var/run/postgresql/ -d test --section=pre-data --section=post_data -Fd -f test_schema.pg_dump

  • Отбросьте целевую базу данных:
    postgres=# drop database prod;

  • Восстановить пустую целевую базу данных:
    postgres=# create database prod;

  • Импортировать в целевую базу данных:

    • test table definitions:
      $ pg_restore -d prod --section=pre-data test_schema.pg_dump
    • данные продукта:
      $ pg_restore -d prod --section=data prod.pg_dump
    • тестовые ограничения и индексы:
      $ pg_restore -d prod --section=post-data test_schema.pg_dump
  • Проанализируйте целевую базу данных:
    prod=> analyze;


Это можно оптимизировать с помощью параллельного восстановления с правильным использованием pg_restore -j.


Вы можете подумать о подходящем решении для управления изменениями схемы на будущее.

person Tometzky    schedule 22.01.2018
comment
Проблема в том, что psql не запущен на моем компьютере. Не знаю почему. - person Mamba; 22.01.2018
comment
Это то, что вы должны исправить, чтобы иметь возможность эффективно выполнять административные задачи в своей базе данных. Возможно, поищите сообщение об ошибке в SuperUser или попытайтесь описать свою проблему и попросить о помощи там. - person Tometzky; 23.01.2018