post gresql 은 fdw 를 이용 하여 서로 다른 데이터베이스 간 의 데이터 교환 을 실현 합 니 다(추천)

머리말
최근 작업 할 때 데이터베이스 A 의 표 a1 로 데이터베이스 B 에 삽 입 된 b2 표를 업데이트 해 야 합 니 다.데이터 베 이 스 는 모두 postgres 데이터베이스 이기 때 문 입 니 다.
나 는 postgres 가 생각 났 다.fdw 플러그 인
준비 작업
우선 이 두 데이터베이스 간 의 네트워크 가 통 하 는 것 을 보증 해 야 한다.
데이터베이스 A 이름 AA ip 10.10.2100(허구)포트 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.데이터 삽입
2.1 외부 표 tbfdw_b1 표 a1 데이터 삽입
두 시 계 는 모두 같은 시계 구조 이기 때문에 직접 삽입 할 수 있다.

INSERT into tb_fdw_b1 SELECT * from a1;
외부 표 는 실시 간 으로 데이터베이스 a 에서 외부 표 tb 를 변 경 했 기 때 문 입 니 다.fdw_b1 의 데이터,데이터베이스 B 의 b1 표 의 데이터 도 이에 따라 우리 가 처음에 목적 을 달성 했다.
업 데 이 트 를 하고 DELETE 를 삭제 하 는 것 도 마찬가지 입 니 다.여기 서 는 말 하지 않 겠 습 니 다.
3.정시 임 무 를 이용 하여 자동 동기 화 를 달성 합 니 다.
매일 실행 해 야 하 는 것 은 분명히 우리 의 게으름뱅이 이미지 에 부합 되 지 않 기 때문에 정시 임무 로 내일 자동 동기 화 를 실현 하 는 것 이 필수 적 이다.나 는 그 에 게 매일 아침 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 이 데이터 교환 을 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기