1 需求
现在在pg 数据库里面,有两个库,A 库和 B库
现在需要将B 库里面一个表里面的数据,迁移到A库里面的一个表,但是字段有可能有一些差别,而且不是表里面数据全部迁移,是一个时间段,获取分区表里面特定分区里面的数据进行迁移
2 实现
前提是PG 数据库
dblink 扩展安装:dblink 是一个可选扩展,需要手动安装。
安装
CREATE EXTENSION IF NOT EXISTS dblink;
检查是否安装成功
SELECT * FROM pg_extension WHERE extname = 'dblink';
有以上的结果就是安装成功
确保 dblink 所在的 schema(通常是 public)在搜索路径中:
SHOW search_path;
如果 public 不在路径中,可以临时添加:
SET search_path TO public, "$user", pg_catalog;
或永久修改 postgresql.conf:
search_path = '"$user", public'
接下来就进行迁移
以下命令是在A 库进行操作
实现将B库里面的数据迁移到A 库
INSERT INTO user_202307 (
num,
obs_time,
lat,
lon,
rh,
AA
) SELECT
*
FROM
dblink ( 'dbname=B user=root password=123456', 'SELECT num,obs_time,lat,lon,rh,aa FROM user_202307' ) AS remote (
num VARCHAR,
obs_time TIMESTAMP,
lat NUMERIC,
lon NUMERIC,
rh NUMERIC,
aa NUMERIC
) ON conflict ( num, obs_time ) DO
NOTHING;
即使user 分区表内的字段很多,如果只是迁移几个字段,那么就写几个,顺序要一致
如果要查询一个时间段,那么在语句里面的select语句里面可以增加时间段条件;
还需要注意,表里面的非空字段,一定要进行写,不然会报错,或者你不想要那个字段,但是他是非空,你把这个字段非空属性去掉