postgresql 利用fdw来实现不同数据库之间数据互通(推荐)

前言
最近在工作的时候 需要用数据库A中的表a1来更新插入数据库B中的b2表 由于数据库都是postgres数据库
我想到了 postgres_fdw插件

准备工作
首先需要保证这两个数据库之间网 是通的

数据库A 名字 AA ip 10.10.2.100(虚构)端口 5432 用户名 postgres
数据库B 名字 BB ip 100.20.0.120(虚构)端口 6688 用户名 postgres

一 利用fdw创建2个数据库之间的连接

1.1 安装 postgres_fdw插件

Create extension "postgres_fdw";

1.2 创建外部连接

无论你实在A数据库中创建B数据库的连接 ,还是在B数据库中创建A数据库的连接 从本质上是一样的,都是为了打通2个数据库,实现数据互通
1.2.1 在A数据库创建b数据库的连接

 --创建外部服务器
-- 括号里的三个参数,分别是数据库b的ip、端口和数据库名称
CREATE SERVER lianjiebb FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '100.20.0.120', port '6688', dbname 'BB');
--创建用户映射·
-- 括号里的两个参数,分别是数据库b数据库的用户名、密码
create user mapping for postgres server lianjiebb options(user 'postgres', password '数据库密码');

1.2.2 在b数据库创建a数据库的连接

--创建外部服务器
-- 括号里的三个参数,分别是数据库a的ip、端口和数据库名称
CREATE SERVER lianjieAA FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.2.100', port '5432', dbname 'AA');
--创建用户映射·
-- 括号里的两个参数,分别是数据库a数据库的用户名、密码
create user mapping for postgres server lianjieAA options(user 'postgres', password '数据库密码');

1.2.3 查询 外部链接

select * from pg_foreign_server;

1.3 创建外部表

在A数据库创建b1表的外部链接

CREATE FOREIGN TABLE tb_fdw_b1
 (
 collect_time timestamp(6),
 id varchar(36) ,
 列名1 numeric(12,2) ,
 列名2 int4 ,
列名3 timestamp(6)
 ) --跟b1 一模一样的表结构就行
 server lianjiebb --你创建的外部链接名字
 options (table_name '时序库的表名');

查看外部表是否有数,有数就表示ok了

select * from tb_fdw_b1;

在数据库b上创建a1表的外部链接也是一样的

二 插入数据

2.1 往外部表tb_fdw_b1 插入表a1的数据

因为 俩个表都是一样的表结构,可以直接插入

INSERT into tb_fdw_b1 SELECT * from a1;

因为外部表是实时的 在数据库a中更改了 外部表tb_fdw_b1 的数据 ,数据库B中的b1表中的数据也随之改变 达成了我们一开始的目的

更新 UPDATE 删除DELETE 也是一样的 在这里就不说了

三 利用定时任务来达成自动同步

每天都需要执行显然不符合我们的“懒人”形象 ,所以用定时任务来实现明天自动同步是必不可少的 我让他每天早上8点自动执行

3.1 利用 pgadmin实现定时同步(截图)

3.1.1

3.1.2

3.1.3

3.1.4

3.2 直接上语句实现定时同步

DO $$
DECLARE
 jid integer;
 scid integer;
BEGIN
-- Creating a new job
INSERT INTO pgagent.pga_job(
 jobjclid, jobname, jobdesc, jobhostagent, jobenabled
) VALUES (
 1::integer, '更新表b1'::text, ''::text, ''::text, true
) RETURNING jobid INTO jid;

-- Steps
-- Inserting a step (jobid: NULL)
INSERT INTO pgagent.pga_jobstep (
 jstjobid, jstname, jstenabled, jstkind,
 jstconnstr, jstdbname, jstonerror,
 jstcode, jstdesc
) VALUES (
 jid, '更新表b1'::text, true, 's'::character(1),
 ''::text, '数据库A'::name, 'f'::character(1),
 ' INSERT into tb_fdw_b1 SELECT * from a1;'::text, ''::text
) ;

-- Schedules
-- Inserting a schedule
INSERT INTO pgagent.pga_schedule(
 jscjobid, jscname, jscdesc, jscenabled,
 jscstart, jscend, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths
) VALUES (
 jid, '更新表b1'::text, ''::text, true,
 '2021-02-07 10:24:50 +08:00'::timestamp with time zone, '2100-02-07 10:24:52 +08:00'::timestamp with time zone,
 -- Minutes
 ARRAY[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Hours
 ARRAY[false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Week days
 ARRAY[false,false,false,false,false,false,false]::boolean[],
 -- Month days
 ARRAY[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Months
 ARRAY[false,false,false,false,false,false,false,false,false,false,false,false]::boolean[]
) RETURNING jscid INTO scid;
END
$$;

到此这篇关于postgresql 利用fdw来实现不同数据库之间数据互通的文章就介绍到这了,更多相关postgresql实现数据互通内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python连接PostgreSQL数据库的过程详解

    1. 常用模块 # 连接数据库 connect()函数创建一个新的数据库连接对话并返回一个新的连接实例对象 PG_CONF_123 = { 'user':'emma', 'port':123, 'host':'192.168.1.123', 'password':'emma', 'database':'dbname'} conn = psycopg2.connect(**PG_CONF_123) # 打开一个操作整个数据库的光标 连接对象可以创建光标用来执行SQL语句 cur = conn.cu

  • 在Ubuntu中安装Postgresql数据库的步骤详解

    介绍 众所周知PostgreSQL 是自由的对象-关系型数据库服务器(数据库管理系统),在ubuntu下安装Postgresql是一件非常容易的事情,下面话不多说了,来跟着小编来一起看看详细的介绍吧. 安装方法如下: 1.安装Postgresql的服务器以及客户端: sudo apt-get install postgresql postgresql-client 2.通常情况下,安装完成以后Postgresql已经一定启动了,下面是一些常见的操作指令: # 查看状态 sudo /etc/ini

  • Linux下创建Postgresql数据库的方法步骤

    前言 PostgreSQL (也叫 Postgres)是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行.因为之前用默认的配置创建pgsql数据库,导致root的占用率达到97%: 所以决定重新创建一次数据库,很多坑又忘了.为了避免以后再忘记,所以决定记录下面,分享出来供大家参考学习,下面来一起看看详细的介绍吧. 创建步骤如下: 创建一个放Data的文件夹,/majestic12/pgsql/data PGDATA = /majestic12/pgsql/

  • PHP连接及操作PostgreSQL数据库的方法详解

    本文实例讲述了PHP连接及操作PostgreSQL数据库的方法.分享给大家供大家参考,具体如下: PostgreSQL扩展在默认情况下在最新版本的PHP 5.3.x中是启用的. 可以在编译时使用--without-pgsql来禁用它.仍然可以使用yum命令来安装PHP-PostgreSQL接口: yum install php-pgsql 在开始使用PHP连接PostgreSQL接口之前,请先在PostgreSQL安装目录中找到pg_hba.conf文件,并添加以下行: # IPv4 local

  • C# 操作PostgreSQL 数据库的示例代码

    什么是PostgreSQL? PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS). 用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们. PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发. 它不受任何公司或其他私人实体控制. 它是开源的,其源代码是免费提供的. PostgreSQL是跨平台的,可以在许多操作系统上运行,如Linux,FreeBSD,OS X,Solaris和Microsoft

  • postgresql 利用fdw来实现不同数据库之间数据互通(推荐)

    前言 最近在工作的时候 需要用数据库A中的表a1来更新插入数据库B中的b2表 由于数据库都是postgres数据库 我想到了 postgres_fdw插件 准备工作 首先需要保证这两个数据库之间网 是通的 数据库A 名字 AA ip 10.10.2.100(虚构)端口 5432 用户名 postgres 数据库B 名字 BB ip 100.20.0.120(虚构)端口 6688 用户名 postgres 一 利用fdw创建2个数据库之间的连接 1.1 安装 postgres_fdw插件 Crea

  • postgresql 利用xlog进行热备操作

    一.验证postgresql增量合并的方案 结果:没有有效可行的增量合并方案,暂时放弃 二.梳理postgresql基于wal的增量备份 物理备份与还原适用于跨小版本的恢复但是不能跨平台 逻辑备份与还原备份数据适用于跨版本和跨平台的恢复 postgersql增量备份步骤 1.首先创建归档目录 例如:归档目录为/archive_pg_xlog/xlog 1>mkdir -p /archive_pg_xlog/xlog 2>chown -R postgres:postgres /archive_p

  • PostgreSQL利用递归优化求稀疏列唯一值的方法

    在数据库中经常会碰到一些表的列是稀疏列,只有很少的值,例如性别字段,一般就只有2种不同的值. 但是当我们求这些稀疏列的唯一值时,如果表的数据量很大,速度还是会很慢. 例如: 创建测试表 bill=# create table t_sex (sex char(1), otherinfo text); CREATE TABLE bill=# insert into t_sex select 'm', generate_series(1,10000000)||'this is test'; INSER

  • Windows版 PostgreSQL 利用 pg_upgrade 进行大版升级操作方法

    最近 PostgreSQL 15 版本正式发布了,新版本的各种特性和好处本文就不展开介绍了,主要介绍一下 Windows 环境下 PostgreSQL 大版本升级的方法,我们现在的几个数据库都是运行在 Windows服务器的 PostgreSQL 14,首先准备一份新版本的 PostgreSQL 初始化,并调整好所有设置,关于这一步其实和安装一个全新的 PostgreSQL 操作差不多,可以看我之前 的一篇博文 Windows 系统 PostgreSQL 手工安装配置方法不过在操作的时候对于新版

  • 利用python生成一个导出数据库的bat脚本文件的方法

    实例如下: # 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实例的sql语句 sql = 'mysqldump -u%s -p%s -h%s -P%d --default-character-set=utf8 --databases mu_ins_s%s > %s.s%d.mu_ins_%d.sql' %(db['user'], db['pwd'], db['host'], db['port'], index, db['serv

  • 不同数据库之间导入导出功能介绍

    1. 在SQL Server数据库之间进行数据导入导出 (1).使用SELECT INTO导出数据 在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同时具备两个功能:根据SELECT后跟的字段以及INTO后面跟的表名建立空表(如果SELECT后是*, 空表的结构和FROM所指的表的结构相同):将SELECT查出的数据插入到这个空表中.在使用SELECT INTO语句时,INTO后跟的表必须在数据库不存在,否则出错,下面是一个使用SELEC

  • 浅析Python与Mongodb数据库之间的操作方法

    MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). 1. 安装Mongodb和pymongo Mongodb的安装和配置 Mongodb的安装教程请网上搜索, 安装完成后,    进行以下配置过程: 1.1 创建目录, 该目录为Mongodb数据文件的存放目录: *注: 本人使用的不是root用户, 所以修改目录的拥有者. * sudo mkdir /data sudo chown -R python:python /data mkdir /da

  • PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例

    本文实例讲述了PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据.分享给大家供大家参考,具体如下: 主要功能是从postgreSql查询数据,并检索,由于自己刚开始接触,所以难点在于多条数据同时筛选并分页显示出来,写下自己的代码与大家共享. <html> <head> <script type="text/javascript"> /** * 分页函数 * pno--页数 * psize--每页显示记录数 * 分页部分是从真实数

  • mysql如何利用Navicat导出和导入数据库的方法

    MySql是我们经常用到的数据,无论是开发人员用来练习,还是小型私服游戏服务器,或者是个人软件使用,都十分方便.对于做一些个人辅助软件,选择mysql数据库是个明智的选择,有一个好的工具更是事半功倍,对于MySql 的IDE 我推荐Navicat for MySql,现在我就向大家介绍如何利用Navicat for MySql 导出和导入数据. 导出数据库: 打开Navicat ,在我们要到处的数据上面右击鼠标,然后弹出的快捷菜单上点击"转储SQL 文件",在再次弹出的子菜单项中选择第

  • 利用golang驱动操作MongoDB数据库的步骤

    安装MongoDB驱动程序 mkdr mongodb cd mongodb go mod init go get go.mongodb.org/mongo-driver/mongo 连接MongoDB 创建一个main.go文件 将以下包导入main.go文件中 package main import ( "context" "fmt" "log" "go.mongodb.org/mongo-driver/bson" &quo

随机推荐