postgresql 如何从另一台服务器上的数据库转储更新Postgres数据库模式中的选定表?

axzmvihb  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(43)

我有一个数据库,有些表在dev服务器上定期更新,需要推送到prod服务器上的数据库。使用pg_dump和pg_restore将更新后的表从dev数据库迁移到prod数据库的适当方法是什么?我可以把整个数据库转储到dev服务器上,然后在prod服务器上恢复,但有些表包含动态数据(由应用程序创建/更新),这两个数据库之间不同,所以这些表必须保留在prod服务器上。仍然有一些表包含静态数据,这些数据不会被更改,也不需要在prod服务器上更新,尽管它是好的,更新一下。
所以基本上我想做的是使用pg_dump和pg_restore(版本15.4)来更新prod服务器上数据库的一些表中的数据,使用dev服务器上数据库中相应表的数据。谢谢。
P.S.我已经阅读了pg_dump和pg_restore的手册页,但仍然不清楚如何做我想要的。我已经尝试了一些测试,并没有像我预期的那样工作。我也在网上搜索,没有看到解决相同问题的帖子。

blpfk2vs

blpfk2vs1#

添加--clean --if-exists可以覆盖整个表,而使用--schema='specific_schema'--table='specific_table'可以缩小pg_dump的目标范围,跳过其他所有目标。

pg_dump -d your_dev_db -U your_dev_user -p 5432 \
   --table='your_schema.your_table' --clean --if-exists \
| psql -d your_prod_db -U your_prod_user -p 5432 --ON_ERROR_STOP

字符串
@Adrian Klaver提到的postgres_fdw可以让您链接dev上的对象,使其在prod上可见和可访问,就像它们在本地一样,这让您可以直接使用它们,或者从DML引用它们,以便在prod内基于dev现场执行必要的prod更新。Demo:

CREATE EXTENSION postgres_fdw;
CREATE SCHEMA IF NOT EXISTS dev_public_schema;

CREATE SERVER foreign_server
        FOREIGN DATA WRAPPER postgres_fdw
        OPTIONS (dbname 'dev');
CREATE USER MAPPING FOR current_user
        SERVER foreign_server
        OPTIONS (user 'postgres');
IMPORT FOREIGN SCHEMA public
   FROM SERVER foreign_server 
   INTO dev_public_schema;

INSERT INTO public.my_prod_table1 
SELECT * FROM dev_public_schema.my_dev_table1
WHERE created_at>='yesterday'::timestamptz;


该文档还记录了多种复制方法,这些方法允许您设置将数据从dev移动到prod的自动过程。特别是,您可以设置logical replication以在prod上“重播”在dev上发生的特定更改。

相关问题