Postgresql 远程同步(非实时同步,小数据量)

源端要开通目标的相关访问权限

目标端:

1.建立远程表的视图

create view v_bill_tbl_version_update_control_info as SELECT * FROM dblink(‘hostaddr=10.10.10.8 port=4321 dbname=postgres user=postgres password=postgres‘, ‘SELECT id,appid,ratio,status,create_time,char_package_name,version from  tbl_version_update_control_info‘)
AS t(id integer,appid  character(20),ratio integer,status character(1),create_time timestamp without time zone,char_package_name character varying(50),version character varying(8));

2.建立和远程表一样的判断表以及实体表

CREATE TABLE tbl_version_update_control_info (

id integer NOT NULL,

appid character(20) NOT NULL,

ratio integer DEFAULT 0 NOT NULL,

status character(1) DEFAULT 0 NOT NULL,

create_time timestamp without time zone DEFAULT now(),

char_package_name character varying(50),

version character varying(8)

);

CREATE TABLE work_table_tbl_version_update_control_info (

id integer NOT NULL,

appid character(20) NOT NULL,

ratio integer DEFAULT 0 NOT NULL,

status character(1) DEFAULT 0 NOT NULL,

create_time timestamp without time zone DEFAULT now(),

char_package_name character varying(50),

version character varying(8)

);

3.建立同步函数

CREATE OR REPLACE FUNCTION sync_tbl_version_update_control_info()

RETURNS integer

LANGUAGE plpgsql

AS $function$

declare

v_src_count int;   --存放源数据统计数据

v_dst_count int;  --存放目标端数据统计数据

v_equal_count int;  --源端和目标端相同的数据

v_run int8;      --统计运行改函数的进行数,如果大于1,说明存在,改函数在运行

begin

v_src_count := 0;

v_dst_count := 0;

v_equal_count := 0;

select count(*) into v_run from pg_stat_activity where query ~ ‘sync_tbl_version_update_control_info‘;

if v_run>1 then

raise notice ‘another process is running, this will exit soon.‘;

return 1;

end if;

if (pg_is_in_recovery()) then

raise notice ‘pg_is_in_recovery is true.‘;

return 1;

end if;

truncate table ONLY work_table_tbl_version_update_control_info;

insert into work_table_tbl_version_update_control_info

(id,appid,ratio,status,create_time,char_package_name,version)

select id,appid,ratio,status,create_time,char_package_name,version from v_bill_tbl_version_update_control_info;

select count(*) into v_src_count from work_table_tbl_version_update_control_info;

select count(*) into v_dst_count from tbl_version_update_control_info;

raise notice ‘v_src_count:%, v_dst_count:%‘,v_src_count,v_dst_count;

if ( v_src_count = v_dst_count and v_src_count <> 0 ) then

select count(*) into v_equal_count from work_table_tbl_version_update_control_info t1,tbl_version_update_control_info t2

where t1.id=t2.id

and t1.appid = t2.appid

and t1.ratio = t2.ratio

and t1.status = t2.status

and t1.create_time = t2.create_time

and t1.char_package_name = t2.char_package_name

and t1.version = t2.version;

raise notice ‘v_src_count:%, v_dst_count:%, v_equal_count:%‘,v_src_count,v_dst_count,v_equal_coun

t;

if ( v_equal_count <> v_src_count ) then

truncate table ONLY tbl_version_update_control_info;

insert into tbl_version_update_control_info

(id,appid,ratio,status,create_time,char_package_name,version)

select id,appid,ratio,status,create_time,char_package_name,version from work_table_tbl_version_update_control_info;

end if;

elsif ( v_src_count <> v_dst_count and v_src_count <> 0 ) then

truncate table ONLY tbl_version_update_control_info;

insert into tbl_version_update_control_info

(id,appid,ratio,status,create_time,char_package_name,version)

select id,appid,ratio,status,create_time,char_package_name,version from work_table_tbl_version_update_control_info;

elsif v_src_count = 0 then

raise notice ‘ERROR: src no data.‘;

return 1;

end if;

return 0;

end;

$function$

4.执行函数进行同步并确认同步

select  sync_tbl_version_update_control_info();

select count(*) from tbl_version_update_control_info;

5.系统定时任务添加:

15 2 * * * /home/postgres/sync_data.sh >>/tmp/sync.log 2>&1

cat /home/postgres/sync_data.sh

echo -e "start sync tbl_version_update_control_info;"

date +%F\ %T

psql -h 127.0.0.1 hank hank -c "select * from sync_tbl_version_update_control_info()";

date +%F\ %T

echo -e "end sync tbl_version_update_control_info;"

时间: 2024-10-17 16:37:19

Postgresql 远程同步(非实时同步,小数据量)的相关文章

rsync远程同步(定期同步、实时同步)

关于rsync . 一款快速增量备份工具 1.Remote Sync,远程同步 2.支持本地复制,或者与其他SSH.rsync主机同步 3.官方网站: http://rsync.samba.org 配置rsync源服务器 rsync同步源: 指备份操作的远程服务器,也称为备份源 配置rsync源 基本思路: 1.建立rsyncd.conf配置文件.独立的账号文件 .启用rsync的--daemon模式 应用示例: 1.户backuper,允许下行同步 2.操作的目录为/var/www/html/

在Google Map中使用地址获取坐标(适用小数据量)

近期手上有个95条数据的地址信息,想把地址转换成经纬度坐标,叠加在底图上.ESRI的online作为专业的云平台,号称提供地理编码服务,可能使用自己的数据制作Web map,于是转成CSV后试了下,结果只有4条记录转换成坐标了,并且都偏离了一个省的范围,基本上不可用.后来想在google earth上试下,使用地址搜索,也不知道是服务器慢,还是什么其他原因,earth的搜索功能简直处于瘫痪状态,打一个地址,10分钟能反应过来,结果基本上是找不到.无奈之下,又试了试google Map,Map上是

rsync+lsyncd实现(本地以及远程)文件实时同步

lsyncd基于lua语言开发,整合了rsync和notify 实现文件的实时同步 系统环境  cat /etc/issue CentOS release 6.6 (Final)  uname -sr Linux 2.6.32-504.el6.x86_64 服务器规划 rsync服务器:                   192.168.10.241 rsync + lsyncd服务器 :         192.168.10.231 一.配置rsync服务器 1.配置xinetd来管理rsy

rsync远程同步(定期同步,实时同步实战!)

本章结构 1.rsync同步简介2.配置rsync备份源3.rsync命令基本用法4.rsync备份操作示例5.rsync+inotify结合使用 关于rsync . 一款快速增量备份工具 1.Remote Sync,远程同步2.支持本地复制,或者与其他SSH.rsync主机同步3.官方网站: http://rsync.samba.org 配置rsync源服务器 rsync同步源: 指备份操作的远程服务器,也称为备份源 配置rsync源 基本思路: 1.建立rsyncd.conf配置文件.独立的

rsync远程同步+inotify实时同步

rsync远程同步备份服务器 客户端发生改变,数据同步到服务器 原文地址:http://blog.51cto.com/982439641/2060466

windows 系统下,小数据量Oracle用户物理备份

环境:windows Server 2003 oracle 10g,系统间备份 目标系统创建共享文件,原系统挂载共享目录 写批处理脚本,用任务计划定时调用 Rem * 由于系统实时性要求不是很高,数据量不大,且只有一块磁盘,考虑异地备份 * Rem * 异地备份的时候使用expdp 出schema THUNIITSMUSER * Rem * 使用windows命令的共享文件模式,将dump出来的文件copy到192.168.1.47上 * Rem * create or replace dire

hihocoder #1062 : 最近公共祖先&#183;一(小数据量 map+set模拟+标记检查 *【模板】思路 )

#1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢? “为什么呢?”小Hi如是问道,在他的观察中小Ho已经沉迷这个网站一周之久了,甚至连他心爱的树玩具都弃置一边. “嘿嘿,小Hi,你快过来看!”小Ho招呼道. “你看,在这个对话框里输入我的名字,在另一个对话框里,输入你的名字,再点这个查询按钮,就可以查出来……什么!我们居然有同

poj 1679 The Unique MST 【次小生成树+100的小数据量】

题目地址:http://poj.org/problem?id=1679 2 3 3 1 2 1 2 3 2 3 1 3 4 4 1 2 2 2 3 2 3 4 2 4 1 2 Sample Output 3 Not Unique! 分析:T组数据,每组n个节点m条边.计算一下,最小生成树是不是独一无二的,如果是就输出最小生成树的权值和,否则输出Not Unique!(不是独一无二的).先计算最小生成树,在计算次小生成树,判断两者的值是否相等!输入数据保证不存在重边. #include <stdi

小数据量csv文件数据导入数据库(思路)

大致写写思路,因为sqlserver提供了可以直接导入的图形界面. 1.private static string GetConnectionString(string folderPath)  //文件夹路径 { string [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="[email protected]"\;Extended Properties='Text;'"; return