在pgAdmin中仅将约束键从一个数据库复制到另一个数据库

时间:2018-01-22 08:40:23

标签: postgresql pgadmin-4

我有两个服务器(以及两个数据库,每个服务器来自pgAdmin上的服务器):

第一台服务器用于测试,第二台服务器是客户端将在其上工作的真实服务器。

这两个数据库有相同的表:第一个表上有9个表,第二个表上有9个表。

但是在测试服务器上,我已经测试了约束密钥(Check,foreign,unique,not null),并准备在服务器2上部署。

我如何只复制那些约束?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用命令行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;

  • 导入目标数据库:

    • 测试表定义:
      $ 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正确使用来优化。

您可能会考虑将来适当的schema change management solution