postgresql
백업 및 복원
수색…
비고
pg_dumpall
및 pg_dump
를 사용하는 대신 파일 시스템 백업
그것은 당신이 사용하는 경우, 당신은 전화를하는 것이 매우 중요합니다 pg_start_backup()
이전과 기능을 pg_stop_backup()
후 기능. 그렇지 않으면 파일 시스템 백업을 수행하는 것이 안전하지 않습니다. 이러한 함수 호출없이 백업 된 파일 시스템의 ZFS 또는 FreeBSD 스냅 샷조차도 데이터베이스를 복구 모드로 설정하고 트랜잭션을 잃을 수 있습니다.
Postgres 백업 파일 (특히 사용자 정의 형식)이 대체 복원 지원에 매우 다양하기 때문에 일반 Postgres 백업 대신 파일 시스템 백업을하지 않아야합니다. 단일 파일이므로 관리하기가 번거롭지 않습니다.
하나의 데이터베이스 백업
pg_dump -Fc -f DATABASE.pgsql DATABASE
-Fc
는 원시 SQL보다 강력한 성능을 제공하는 "사용자 지정 백업 형식"을 선택합니다. 자세한 내용은 pg_restore
를 참조하십시오. 바닐라 SQL 파일을 원하면 다음과 같이하십시오.
pg_dump -f DATABASE.sql DATABASE
또는
pg_dump DATABASE > DATABASE.sql
백업 복원
psql < backup.sql
더 안전한 대안은 트랜잭션에서 복원을 래핑하기 위해 -1
을 사용합니다. -f
는 쉘 재 지정을 사용하지 않고 파일 이름을 지정합니다.
psql -1f backup.sql
데이터베이스를 지정하려면 -d
옵션과 함께 pg_restore
를 사용하여 사용자 정의 형식 파일을 복원해야합니다.
pg_restore -d DATABASE DATABASE.pgsql
사용자 정의 형식을 다시 SQL로 변환 할 수도 있습니다.
pg_restore backup.pgsql > backup.sql
복원 할 항목을 선택하고 선택적으로 병렬 처리를 사용 가능하게 할 수 있으므로 사용자 정의 형식을 사용하는 것이 좋습니다.
하나의 postgresql 릴리즈에서 새로운 것으로 업그레이드하는 경우 pg_dump 다음에 pg_restore가 필요할 수 있습니다.
전체 클러스터 백업
$ pg_dumpall -f backup.sql
이것은 각 데이터베이스에 대해 한 번씩 서버에 여러 번 연결하고 pg_dump
를 실행하여 배후에서 작동합니다.
때로는 이것을 cron 작업으로 설정하려는 유혹에 빠지기 때문에 백업이 파일 이름의 일부로 사용 된 날짜를보고 싶을 수도 있습니다.
$ postgres-backup-$(date +%Y-%m-%d).sql
그러나 이렇게하면 매일 큰 파일을 생성 할 수 있습니다. Postgresql은 정기적 인 백업을위한 훨씬 더 나은 메커니즘을 가지고 있습니다 - WAL 아카이브
pg_dumpall의 출력은 동일하게 구성된 Postgres 인스턴스로 복원하는 데 충분하지만 $PGDATA
( pg_hba.conf
및 postgresql.conf
)의 구성 파일은 백업의 일부가 아니므로 별도로 백업해야합니다.
postgres=# SELECT pg_start_backup('my-backup');
postgres=# SELECT pg_stop_backup();
파일 시스템 백업을하려면 이러한 함수를 사용하여 백업이 준비되는 동안 Postgres가 일관된 상태인지 확인해야합니다.
복사를 사용하여 가져 오기
CSV 파일의 데이터를 테이블로 복사하려면
COPY <tablename> FROM '<filename with path>';
/home/user/
위치한 user_data.csv
파일에서 테이블 user
삽입하려면 다음을 수행하십시오.
COPY user FROM '/home/user/user_data.csv';
파이프로 구분 된 파일에서 테이블로 데이터를 복사하려면
COPY user FROM '/home/user/user_data' WITH DELIMITER '|';
참고 : with delimiter
가있는 옵션이 없으면 기본 구분 기호는 쉼표 ,
파일을 가져 오는 동안 헤더 줄을 무시하려면
헤더 옵션 사용 :
COPY user FROM '/home/user/user_data' WITH DELIMITER '|' HEADER;
참고 : 데이터가 인용되면 기본적으로 데이터 인용 문자는 큰 따옴표입니다. 데이터가 다른 문자를 사용하여 QUOTE
되는 경우 QUOTE
옵션을 사용하십시오. 그러나이 옵션은 CSV 형식을 사용할 때만 허용됩니다.
복사를 사용하여 내보내기
표를 표준 o / p에 복사하려면
COPY <tablename> STDOUT (DELIMITER '|');
표 사용자를 표준 출력으로 내보내려면 다음을 수행하십시오.
사용자를 표준화 (DELIMITER '|');
표를 파일에 복사하려면
COPY 사용자 FROM '/ home / user / user_data'WITH DELIMITER '|';
SQL 문의 출력을 파일에 복사하려면
COPY (sql 문) '<경로가 포함 된 파일 이름>';
COPY (SELECT * 사용자로부터 WHERE user_name LIKE 'A %') TO '/ home / user / user_data';
압축 파일로 복사하는 방법
프로그램 사용자에게 'gzip> /home/user/user_data.gz'을 복사하십시오.
여기 gzip 프로그램은 사용자 테이블 데이터를 압축하기 위해 실행됩니다.
psql을 사용하여 데이터 내보내기
복사 명령을 사용하거나 psql 명령의 명령 행 옵션을 사용하여 데이터를 내보낼 수 있습니다.
csv 데이터를 표 사용자에서 CSV 파일로 내보내려면 다음을 수행하십시오.
psql -p \<port> -U \<username> -d \<database> -A -F<delimiter> -c\<sql to execute> \> \<output filename with path>
psql -p 5432 -U postgres -d test_database -A -F, -c "select * from user" > /home/user/user_data.csv
여기서 -A와 -F의 조합이 속임수를 사용합니다.
-F
는 구분 기호를 지정하는 것입니다.
-A or --no-align
정렬되지 않은 출력 모드로 전환합니다. (그렇지 않으면 기본 출력 모드가 정렬됩니다.)