PostgreSQL

[PostgreSQL] pg_dump 사용법 & 복구 절차

리거니 2023. 4. 3. 17:49
pg_dump

    여러 데이터 센터에 걸쳐 복제 클러스터를 구축할 수 있지만,
    우발적인 DELETE DROP 후에는 백업만이 해결책

   이중화 구성이 백업을 대체할 수 없음.

# 논리적(Logical) 백업

[1] pg_dump 사용
[2] 기본적으로 일반 텍스트 파일에 저장하지만, 압축된 tar파일로도 생성 할 수 있음
[3] 이 백업은 psql과 pg_restore를 사용하여 복원 ( SQL 내용을 쉽게 추출할 수 있음 )

[4] pg_dump --help
    pg_dump [OPTION] ... [DBNAME]

g_dump dumps a database as a text file or to other formats.

Usage:
  pg_dump [OPTION]... [DBNAME]

General options:
  -f, --file=FILENAME          output file or directory name
  -F, --format=c|d|t|p         output file format (custom, directory, tar,
                               plain text (default))
  -j, --jobs=NUM               use this many parallel jobs to dump
  -v, --verbose                verbose mode
  -V, --version                output version information, then exit
  -Z, --compress=0-9           compression level for compressed formats
  --lock-wait-timeout=TIMEOUT  fail after waiting TIMEOUT for a table lock
  --no-sync                    do not wait for changes to be written safely to disk
  -?, --help                   show this help, then exit

Options controlling the output content:
  -a, --data-only              dump only the data, not the schema
  -b, --blobs                  include large objects in dump
  -B, --no-blobs               exclude large objects in dump
  -c, --clean                  clean (drop) database objects before recreating
  -C, --create                 include commands to create database in dump
  -e, --extension=PATTERN      dump the specified extension(s) only
  -E, --encoding=ENCODING      dump the data in encoding ENCODING
  -n, --schema=PATTERN         dump the specified schema(s) only
  -N, --exclude-schema=PATTERN do NOT dump the specified schema(s)
  -O, --no-owner               skip restoration of object ownership in
                               plain-text format
  -s, --schema-only            dump only the schema, no data
  -S, --superuser=NAME         superuser user name to use in plain-text format
  -t, --table=PATTERN          dump the specified table(s) only
  -T, --exclude-table=PATTERN  do NOT dump the specified table(s)
  -x, --no-privileges          do not dump privileges (grant/revoke)
  --binary-upgrade             for use by upgrade utilities only
  --column-inserts             dump data as INSERT commands with column names
  --disable-dollar-quoting     disable dollar quoting, use SQL standard quoting
  --disable-triggers           disable triggers during data-only restore
  --enable-row-security        enable row security (dump only content user has
                               access to)
  --exclude-table-data=PATTERN do NOT dump data for the specified table(s)
  --extra-float-digits=NUM     override default setting for extra_float_digits
  --if-exists                  use IF EXISTS when dropping objects
  --include-foreign-data=PATTERN
                               include data of foreign tables on foreign
                               servers matching PATTERN
  --inserts                    dump data as INSERT commands, rather than COPY
  --load-via-partition-root    load partitions via the root table
  --no-comments                do not dump comments
  --no-publications            do not dump publications
  --no-security-labels         do not dump security label assignments
  --no-subscriptions           do not dump subscriptions
  --no-table-access-method     do not dump table access methods
  --no-tablespaces             do not dump tablespace assignments
  --no-toast-compression       do not dump TOAST compression methods
  --no-unlogged-table-data     do not dump unlogged table data
  --on-conflict-do-nothing     add ON CONFLICT DO NOTHING to INSERT commands
  --quote-all-identifiers      quote all identifiers, even if not key words
  --rows-per-insert=NROWS      number of rows per INSERT; implies --inserts
  --section=SECTION            dump named section (pre-data, data, or post-data)
  --serializable-deferrable    wait until the dump can run without anomalies
  --snapshot=SNAPSHOT          use given snapshot for the dump
  --strict-names               require table and/or schema include patterns to
                               match at least one entity each
  --use-set-session-authorization
                               use SET SESSION AUTHORIZATION commands instead of
                               ALTER OWNER commands to set ownership

Connection options:
  -d, --dbname=DBNAME      database to dump
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port number
  -U, --username=NAME      connect as specified database user
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)
  --role=ROLENAME          do SET ROLE before dump

If no database name is supplied, then the PGDATABASE environment
variable value is used.

Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>



=====================================================================================

pg_dump는 PostgreSQL 데이터베이스를 백업하기 위한 유틸리티입니다 . 데이터베이스가 동시에 사용되는 경우에도 일관된 백업을 만듭니다. pg_dump는 데이터베이스에 액세스하는 다른 사용자(reader 또는 writer)를 차단하지 않습니다.

pg_dump는 단일 데이터베이스만 덤프합니다. 전체 클러스터를 백업하거나 클러스터의 모든 데이터베이스에 공통적인 글로벌 개체(예: 역할 및 테이블스페이스)를 백업하려면 pg_dumpall 을 사용하십시오 .

덤프는 스크립트 또는 아카이브 파일 형식으로 출력될 수 있습니다. 

 

pg_dump

pg_dump pg_dump — extract a PostgreSQL database into a script file or other archive file Synopsis pg_dump [connection-option...] [option...] [dbname] …

www.postgresql.org

=========================================================================================
                        Database/Schema/Table 별 백업

[1] pg_dump -d [DB명] -n/-t/-d [이름] (-U [유저명]) > test.sql
                                          

[2] 이관할 [DB에] 접속하여 \i test.sql
    또는 psql -f test.sql

데이터베이스 기준 [role 따로지정해줘야됨]
pg_dump -d test > ~~ .sql
psql -d gbtv -f test_20221208.sql


    따로 search_path 설정은 해줘야 함
    ALTER ROLE 유저명 set search_path = "$user", "스키마명";


pg_dump -d gbtv -U gbtv -s -n gbtv -f  /experdata/gbtv_local.sql         <- gbtv create schema,table (데이터 x)

pg_dump -d gbtv -U gbtv2017 -s -n gbtv2017 -f  /experdata/gbtv2017_local.sql   <- gbtv2017 create schema,table

pg_dump -d gbtv -U gbtv -n gbtv -a -f /experdata/gbtv_data.sql                   <-- gbtv 데이터

pg_dump -d gbtv -U gbtv2017 -n gbtv2017 -a -f /experdata/local_gbtv2017_data.sql   <-- gbtv2017 데이터



=====================================================================================
                        Cluster 전체에 대한 백업

[1] pg_dumpall > test.sql
psql -f test.sql