post gresql 은 fdw 를 이용 하여 서로 다른 데이터베이스 간 의 데이터 교환 을 실현 합 니 다(추천)
5695 단어 postgresql데이터 교환
최근 작업 할 때 데이터베이스 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 이 데이터 교환 을 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients alreadyI am trying to connect to a Postgresql database, I am getting the following Error: You opened up more than the allowed l...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.