수색…


비고

pg_dumpallpg_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.confpostgresql.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

정렬되지 않은 출력 모드로 전환합니다. (그렇지 않으면 기본 출력 모드가 정렬됩니다.)



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow