PostgreSQL 不同模式之间的数据迁移
如果你的数据库是一个多模式的管理方式,那么在使用的过程中可能会遇到这样的诉求,就是我需要将 public 模式中的数据迁移到新的模式中。下面我介绍几种方法:
/usr/pgsql-12/bin/pg_dump -h IP -p 5432 -U postgres -d xxx -n public -s -f /home/tool.sql
create schema ss0530;
do $$
declare
rec record;
begin
for rec in
select relname
from pg_class
where relkind = 'r'
and relnamespace = 'public'::regnamespace
-- and relname ilike '%' -- you can filter table names here
loop
execute format(
'alter table public.%I set schema ss0530',
rec.relname);
end loop;
end;
$$
下面再讲一种比较实用的方法,这种方法适合不同实例的迁移、相同实例也可以操作。通过导出备份然后修改备份文件中的模式来实现。
[postgres@master_server ~]$ /usr/pgsql-14/bin/pg_dump -h 192.168.30.140 -U postgres -d cloudhealth -t vaf1* -f /home/postgres/cloud_health.sql
[postgres@master_server ~]$ sed -i 's/\<public\>\./ss0530./g' /home/postgres/mobile_his.sql
备注:你可以模拟一些表比如一个表中有字段名称是 public 的,特别要注意一些异常修改的。