Replica data from other Database to PostgreSQL release 9.0 and formerly

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:
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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
JSON Java 关系型数据库
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
Spring Boot 学习研究笔记(十三) Spring Data JPA与PostgreSQL的jsonb类型集成
|
7月前
|
关系型数据库 MySQL 测试技术
PolarDB-X replica原理和使用
《PolarDB-X 动手实践》系列第九期,体验如何用PolarDB-X Replica将PolarDB-X作为不同上游数据库的备库。
2552 0
|
11月前
|
SQL 存储 Oracle
|
11月前
|
SQL 关系型数据库 分布式数据库
|
11月前
|
SQL 关系型数据库 分布式数据库
|
SQL 网络协议 关系型数据库
实践教程之PolarDB-X replica原理和使用
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
实践教程之PolarDB-X replica原理和使用
|
存储 Prometheus Kubernetes
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
469 0
云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
|
SQL 存储 Kubernetes
跟我学:PolarDB-X Replica原理和使用
本文整理自阿里云数据库高级工程师佘志伟,在PolarDB-X动手实践系列的分享。
跟我学:PolarDB-X Replica原理和使用
|
存储 Oracle 关系型数据库
德哥解读:微软官宣收购PostgreSQL初创公司Citus Data
昨天在微软的官方博客官宣了微软对PostgreSQL初创公司Citus Data的收购。原文在https://blogs.microsoft.com/blog/2019/01/24/microsoft-acquires-citus-data-re-affirming-its-commitment-to-open-source-and-accelerating-azure-postgresql-performance-and-scale/?from=timeline&isappinstalled=0 背景介绍: Citus Data 2010年成立于加州旧金山。
4361 0

热门文章

最新文章