DBMS: PostgreSQL 14.9 |
pg_dump로 백업받은 파일에서 특정 테이블 이름을 변경하여 복구하고자 하는 경우
오라클의 datapump에서의 remap 기능을 현재 PostgreSQL은 지원하지 않습니다
- text format으로 받은 경우 스크립트 수정하여 실행
- custom format으로 받은 경우 스크립트 추출하여 내용 변경 후 실행
- pg_restore -t 옵션 사용 시 해당 오브젝트만 추출(관련 인덱스 등 안나옴)되므로 주의
명령어 예시
-- sk1.dmp 파일에서 tab1 테이블 tab2_all.sql 파일로 추출
pg_restore -f tab2_all.sql -n public -t tab1 sk1.dmp
이번 포스팅은 커스텀 포멧의 백업파일에서 스크립트 추출 후 테이블명 변경하여 생성하는 테스트 입니다
백업 파일에 있는 tab1 테이블 -> tab2 테이블로 이름 변경하여 복구
[목차여기]
참고
[PostgreSQL] 백업/복구(pg_dump, pg_restore)
pg_dump 백업 진행
-- 커스텀 포멧으로 pg_dump 백업
[postgres@svr1 dump]$ pg_dump -d sk1 -v -Fc -f /home/postgres/dump/sk1.dmp
-- 백업 파일 내용 확인
[postgres@svr1 dump]$ pg_restore -l -t tab1 sk1.dmp
;
; Archive created at 2024-01-24 00:49:32 KST
; dbname: sk1
; TOC Entries: 2726
; Compression: -1
; Dump Version: 1.14-0
; Format: CUSTOM
; Integer: 4 bytes
; Offset: 8 bytes
; Dumped from database version: 14.9
; Dumped by pg_dump version: 14.9
;
;
; Selected TOC Entries:
;
396; 1259 52359 TABLE public tab1 postgres
5911; 0 52359 TABLE DATA public tab1 postgres
[postgres@svr1 dump]$
백업파일에서 스크립트 추출
스크립트 추출의 여러가지 옵션
-- DDL문 추출
[postgres@svr1 dump]$ pg_restore -s -f tab2.sql -n public -t tab1 sk1.dmp
-- DDL + DATA 추출
[postgres@svr1 dump]$ pg_restore -f tab2_all.sql -n public -t tab1 sk1.dmp
-- DATA 추출
[postgres@svr1 dump]$ pg_restore -a -f tab2_dat.sql -n public -t tab1 sk1.dmp
백업 파일에서 추출한 스크립트를 열어보면 SQL문이 작성되어 있습니다
[postgres@svr1 dump]$ head -50 tab2_all.sql
--
-- PostgreSQL database dump
--
-- Dumped from database version 14.9
-- Dumped by pg_dump version 14.9
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: tab1; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.tab1 (
schemaname name,
tablename name,
tableowner name,
tablespace name,
hasindexes boolean,
hasrules boolean,
hastriggers boolean,
rowsecurity boolean
);
ALTER TABLE public.tab1 OWNER TO postgres;
--
-- Data for Name: tab1; Type: TABLE DATA; Schema: public; Owner: postgres
--
COPY public.tab1 (schemaname, tablename, tableowner, tablespace, hasindexes, hasrules, hastriggers, rowsecurity) FROM stdin;
biadm lic_mst postgres \N t f f f
biadm dead_tuple postgres \N t f f f
biadm rel_size postgres \N t f f f
biadm seq_mgmt postgres \N t f f f
biadm sess_stat postgres \N f f f f
반응형
테이블명 변경
vi 등의 에디터로 파일을 열어 tab1 -> tab2로 변경한 후 저장해 주세요
[postgres@svr1 dump]$ vi tab2_all.sql
--
-- Name: tab1; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.tab2 (
schemaname name,
tablename name,
tableowner name,
tablespace name,
hasindexes boolean,
hasrules boolean,
hastriggers boolean,
rowsecurity boolean
);
ALTER TABLE public.tab2 OWNER TO postgres;
--
-- Data for Name: tab2; Type: TABLE DATA; Schema: public; Owner: postgres
--
COPY public.tab2 (schemaname, tablename, tableowner, tablespace, hasindexes, hasrules, hastriggers, rowsecurity) FROM stdin;
biadm lic_mst postgres \N t f f f
biadm dead_tuple postgres \N t f f f
biadm rel_size postgres \N t f f f
biadm seq_mgmt postgres \N t f f f
biadm sess_stat postgres \N f f f f
biadm stat_snapshot postgres \N t f f f
테이블 생성
테이블명을 변경한 스크립트를 실행 합니다
-- 스크립트 실행
[postgres@svr1 dump]$ psql -d sk1 -a -f tab2_all.sql
--
-- PostgreSQL database dump
--
-- Dumped from database version 14.9
-- Dumped by pg_dump version 14.9
SET statement_timeout = 0;
SET
SET lock_timeout = 0;
SET
SET idle_in_transaction_session_timeout = 0;
SET
SET client_encoding = 'UTF8';
SET
SET standard_conforming_strings = on;
SET
SELECT pg_catalog.set_config('search_path', '', false);
set_config
------------
(1 row)
SET check_function_bodies = false;
SET
SET xmloption = content;
SET
SET client_min_messages = warning;
SET
SET row_security = off;
SET
SET default_tablespace = '';
SET
SET default_table_access_method = heap;
SET
--
-- Name: tab1; Type: TABLE; Schema: public; Owner: postgres
--
CREATE TABLE public.tab2 (
schemaname name,
tablename name,
tableowner name,
tablespace name,
hasindexes boolean,
hasrules boolean,
hastriggers boolean,
rowsecurity boolean
);
CREATE TABLE
ALTER TABLE public.tab2 OWNER TO postgres;
ALTER TABLE
--
-- Data for Name: tab2; Type: TABLE DATA; Schema: public; Owner: postgres
--
COPY public.tab2 (schemaname, tablename, tableowner, tablespace, hasindexes, hasrules, hastriggers, rowsecurity) FROM stdin;
COPY 954368
--
-- PostgreSQL database dump complete
--
psql 접속하여 tab2 테이블 조회
[postgres@svr1 dump]$ psql -d sk1
psql (14.9)
Type "help" for help.
sk1=# select count(*) from tab2 ;
count
--------
954368
(1 row)
sk1=#
'DBMS > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] postgres 계정 로그인 불가 single 모드 복구 (FATAL: role "postgres" is not permitted to log in) (1) | 2024.04.19 |
---|---|
[PostgreSQL] ERROR: current transaction is aborted 에러 해결 법 (0) | 2024.04.07 |
[PostgreSQL] WAL 경로 변경하는법 (0) | 2024.03.07 |
[PostgreSQL] auto_explain 사용/미사용 성능 테스트 (0) | 2024.02.29 |
[PostgreSQL] 기본 권한 설정 default privilege(권한 자동 부여) (0) | 2024.02.15 |
댓글