我在我的服务器上使用PostgreSQL (Version9.3),我想用生产实例数据库中的数据更新我的暂存实例数据库中的数据。每个数据库都由不同的角色控制,我希望在传输中将它们的权限保持独立。
我尝试遵循文献资料并使用独立的用户运行这些命令(这些用户可以访问相应的PostgreSQL角色):
staging-user: pg_dump production_db > prod_db_file
production-user: psql --single-transaction staging_db < prod_db_file
但我有几个错误:must be owner of extension plpgsql
和syntax error at or near
。再说,我也不确定这会不会做我想做的事。在pg_dump和psql命令中有很多可选的标志,我不知道应该使用哪一个。(我尝试过多种组合的旗子,但到目前为止没有什么效果。)
注意:当我尝试上述命令时,我的暂存数据库已经存在了。
如何将生产数据移动到暂存数据库?
发布于 2015-06-22 14:36:03
更新2015年10月30日:这个答案比我以前的答案更简单、更准确,为了简洁起见,我删除了这个答案。要查看旧的答案,请查看编辑历史。
pg_dump -Fc my_prod_db > prod_dump.db
pg_restore --no-owner --dbname my_staging_db path/to/prod_dump.db
发布于 2020-11-29 20:11:37
除了基本的转储/还原之外,要具有自动健壮的刷新过程,您可以使用Postgres.ai https://postgres.ai/docs/,https://gitlab.com/postgres-ai/database-lab的数据库实验室引擎。它以某种方式从源获取数据(除了“逻辑”复制、转储/还原之外,您还可以使用pg_basebackup或任何其他方式物理地复制数据目录,或者从备份工具(如WAL-G或pgBackRest)创建的档案中恢复数据目录),然后您可以开始使用“瘦克隆”来“免费”获取许多独立的数据库副本(无需额外的成本或额外的等待时间),这要归功于ZFS或LVM (您选择)提供的复制-on-写(CoW)。在“物理”配置的情况下,也可以配置“连续刷新”选项:数据不断从源更新,您可以根据不同的时间点使用瘦克隆。
在许多情况下,当我们决定将生产数据复制到非生产环境中时,我们可能希望或需要混淆这些数据。这也是可能的,例如,使用诸如postgresql_anonymizer https://postgresql-anonymizer.readthedocs.io/en/stable/、https://gitlab.com/dalibo/postgresql_无名氏等工具。它也可以与数据库实验室引擎一起使用。
https://dba.stackexchange.com/questions/104690
复制相似问题