Replica data from other Database to PostgreSQL release 9.0 and formerly

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介:
PostgreSQL 9.0以前的版本没有办法很方便的加载Oracle fdw模块.
或者你根本就不想直接在你的数据库里面直接加载Oracle fdw模块, 而是想通过一个集中的数据网关来接入Oracle数据库怎么办呢?
如图 : 
Replica data from other Database to PostgreSQL release 9.0 and formerly - 德哥@Digoal - The Heart,The World.
 其中FDW Server作为生产PostgreSQL连接其他生产数据库的网关. 

我们来举一个实际的例子, PostgreSQL 通过 这个数据网关连接远程的Oracle数据库.
Oracle 中有一个表 :
tbl
(id int
col1 varchar2(256),
createtime date);


在PostgreSQL 数据网关上建立连接到Oracle的FDW : 
superuser : 
create server digoal foreign data wrapper oracle_fdw options (dbserver '//192.168.xxx.xxx:1521/digoal');
create user mapping for digoal server digoal options (user 'digoal',password '略');

create FOREIGN table digoal.tbl (id int, col1 varchar(256), createtime timestamp(0) without time zone) server digoal options (table 'tbl',schema 'digoal',plan_costs 'true');

grant select on digoal.tbl to digoal;


在生产PostgreSQL数据库中通过dblink建立连接到PostgreSQL数据网关的对应的oracle 外部表的视图,或者通过postgresql fdw建立外部表. 本例使用dblink建立视图.
create view v_tbl as select id,col1,createtime from dblink('dbname=digoal host=数据网关IP port=端口 password=略 user=digoal','select id,col1,createtime from digoal.tbl') as link_tbl(id int, col1 varchar(256),createtime timestamp(0) without time zone);

建立数据同步的控制表和记录表 : 
create table sync_ctl(modifytime timestamp(0) without time zone);
create table sync_record(cnt int,result text,createtime timestamp(0) without time zone);

建立一个本地表, 存放同步过来的记录
tbl
(id int
col1 varchar(256),
createtime timestamp(0) without time zone);

建立数据同步函数 : 
create or replace function sync_tbl() returns text as $$
declare
v_modifytime timestamp(0) without time zone;
v_now timestamp(0) without time zone;
v_result text;
v_cnt int;
begin
v_result := 'no_operate';
v_now := now();
-- 防止多个调用,导致数据重复.
-- 如果同步是根据createtime来的, 推荐不要放在12点准时执行, 可能远程的记录未来得及插入. 尽量1点以后执行.
lock table sync_ctl in exclusive mode;
perform 1 from sync_ctl limit 1;
if not found then
  insert into sync_ctl(modifytime) values(v_now-interval '1 day');
end if;
select modifytime into v_modifytime from sync_ctl limit 1;
if v_modifytime < current_date then
  insert into tbl(id,col1,createtime) select  id,col1,createtime  from v_tbl where createtime >=date(v_modifytime) and createtime < date(v_now);
  update sync_ctl set modifytime=v_now;
  select count(*) into v_cnt from tbl where createtime >=date(v_modifytime) and createtime < date(v_now);
  v_result := 'ok';
  insert into sync_record(cnt,result,createtime) values(v_cnt,v_result,v_now);
end if;
return v_result;
exception
when others then
  v_result := 'error';
  return v_result;
end;
$$ language plpgsql;


同步时执行上面的函数即可.
select * from sync_tbl();

结果no_operate表示没有任何操作, 可能已经同步了.
结果error表示同步有异常, 需要检查.
结果ok表示同步正常, 记录最后一次同步时间和同步的记录数.

【参考】
注意事项如下 : 
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 数据库 PostgreSQL
postgresql :permission denied to create database
postgresql :permission denied to create database
1428 0
|
16天前
|
存储 人工智能 关系型数据库
阿里云AnalyticDB for PostgreSQL 入选VLDB 2025:统一架构破局HTAP,Beam+Laser引擎赋能Data+AI融合新范式
在数据驱动与人工智能深度融合的时代,企业对数据仓库的需求早已超越“查得快”这一基础能力。面对传统数仓挑战,阿里云瑶池数据库AnalyticDB for PostgreSQL(简称ADB-PG)创新性地构建了统一架构下的Shared-Nothing与Shared-Storage双模融合体系,并自主研发Beam混合存储引擎与Laser向量化执行引擎,全面解决HTAP场景下性能、弹性、成本与实时性的矛盾。 近日,相关研究成果发表于在英国伦敦召开的数据库领域顶级会议 VLDB 2025,标志着中国自研云数仓技术再次登上国际舞台。
112 0
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之使用连接串模式新增PostgreSQL数据源时遇到了报错"not support data sync channel, error code: 0001",该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
人工智能 Oracle 关系型数据库
一篇文章弄懂Oracle和PostgreSQL的Database Link
一篇文章弄懂Oracle和PostgreSQL的Database Link
|
人工智能 关系型数据库 数据库
PostgreSQL 常见问题解决方案 - ERROR: database is being accessed by other users
PostgreSQL 常见问题解决方案 - ERROR: database is being accessed by other users
|
JSON Java 关系型数据库
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
637 0
|
SQL 关系型数据库 分布式数据库
|
SQL 关系型数据库 分布式数据库
|
存储 Prometheus Kubernetes
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
713 0
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator

热门文章

最新文章

推荐镜像

更多