postgres 데이터베이스에서 단일 테이블의 백업을 만드는 방법은 무엇입니까?


160

postgres를 사용하여 데이터베이스 내에서 단일 테이블의 백업을 만드는 방법이 있습니까? 그리고 어떻게? 이것은 pg_dump 명령에서도 작동합니까?

답변:


211

백업 할 테이블 --table을 알려주 pg_dump는 데 사용하십시오 .

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
그리고 그 백업 파일을 복원하는 방법. (.backup), 나는 사용 pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"했지만 나왔다 :pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares

13
psql -U username -d database -1 -f your_dump.sql
rnaud

5
무슨 의미인가요 : abstract_file_path?
bandungeuy

3
왜이 답변이 투표에 참여했는지 잘 모르겠습니다. 사람들은 직접 조사하거나 시도하지 않고 +1을 클릭합니다. 이 답변의 문제는 완전히 쓸모가 없게 만드는 이유는 주어진 솔루션 / 명령이 테이블 (기본 키)에서 작성된 시퀀스를 내 보내지 않으므로 가져 오기가 실패한다는 것입니다. 시퀀스가있는 기본 키를 사용하지 않는 단일 프로덕션 PG 데이터베이스를 알지 못합니다. 절반의 답이며 질문에 철저히 대답하지 못하며 단일 테이블을 내보내거나 가져 오려면 추가 작업이 필요합니다.
user10664542

1
이것과 약간 다른 sudo 트위스트를 사용하여 파일 덤프에 대한 권한 오류 (사용자 postgres가 내 디렉토리에 대한 쓰기 액세스 권한이 없기 때문에 충분히 논리적 임)로 끝나고에 대한 알 수없는 플래그 오류가 발생했습니다 --ignore-version. 더 간단한 Prashant Kumar의 답변이 저에게 효과적이었습니다.
JL Peyret

84

우분투에 있다면

  1. postgres 사용자로 로그인 sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

당신이 명령을 실행하고 있는지 확인 postgres사용자가 쓰기 권한이 (예 : /tmp)

편집하다

다른 컴퓨터에서 .sql을 덤프하려면 .sql 파일에 저장된 소유자 정보를 건너 뛰는 것을 고려해야합니다.

당신이 사용할 수있는 pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
각 이름을 지정하지 않고 모든 테이블을 원한다면 어떻게해야합니까?
shekeine

3
-t 옵션을 제거하십시오! pg_dump -d <database_name> > file.sql
스리 하샤 카 팔라

4
왜 그런지 모르겠지만 -d 옵션이 psql9.3에 유효하지 않으며 주어진 명령이 작동하지 않습니다. 하나는 pg_dump -U username db_name -t table_name> fileName 입니다.
serkan kucukbay

pg_dump -t <table_name> <database_name> > file.sql
Sriram

@ user10664542 : 매뉴얼, 특히이 섹션을 읽으십시오. "이 목적을 위해"테이블 "에는 뷰, 구체화 된 뷰, 시퀀스 및 외부 테이블이 포함됩니다."
Frank Heikens

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

단일 테이블의 백업을 수행 할 수 있지만 전체 데이터베이스의 백업을 수행 한 다음 필요한 테이블을 복원하는 것이 좋습니다. 항상 전체 데이터베이스를 백업하는 것이 좋습니다.

pg_dump를 사용하는 9 가지 방법


왜이 답변이 투표에 참여했는지 잘 모르겠습니다. 사람들은 직접 조사하거나 시도하지 않고 +1을 클릭합니다. 이 답변의 문제는 완전히 쓸모가 없게 만드는 이유는 주어진 솔루션 / 명령이 테이블 (기본 키)에서 작성된 시퀀스를 내 보내지 않으므로 가져 오기가 실패한다는 것입니다. 시퀀스가있는 기본 키를 사용하지 않는 단일 프로덕션 PG 데이터베이스를 알지 못합니다. 절반의 답이며 질문에 철저히 대답하지 못하며 단일 테이블을 내보내거나 가져 오려면 추가 작업이 필요합니다.
user10664542

위에서 언급했듯이, 나는 그 이름에 대한 SO postgres 답변이없는 강한 의혹 사용자 10664542를 가지고 있습니다. 시퀀스는 추가적인 합병증을 가져 오는 반면, 사람들은 사실 이후에 시퀀스를 조정해야하더라도 비슷한 결과에 대해 충분한 공감대가 있습니다. 덤프를 복원해야한다면, max(id)테이블 에서 시퀀스의 마지막 ID를 업데이트하는 방법을 찾을 것 입니다. 이것은 효과가 있었으며 생성 된 SQL을보고 복원 할 수 있다고 확신합니다.
JL Peyret

9

그래픽 사용자 인터페이스를 선호하는 경우 pgAdmin III (Linux / Windows / OS X)을 사용할 수 있습니다. 선택한 테이블을 마우스 오른쪽 버튼으로 클릭 한 다음 "백업"을 클릭하십시오. 그것은 pg_dump당신을 위해 명령을 만들 것입니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


2

Frank Heiken의 답변 외에도, INSERT대신 문 을 사용 copy from stdin하려면 --inserts플래그를 지정해야합니다

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

--ignore-version더 이상 사용되지 않기 때문에 플래그를 생략했습니다 .


왜이 답변이 투표에 참여했는지 잘 모르겠습니다. 사람들은 직접 조사하거나 시도하지 않고 +1을 클릭합니다. 이 답변의 문제는 완전히 쓸모가 없게 만드는 이유는 주어진 솔루션 / 명령이 테이블 (기본 키)에서 작성된 시퀀스를 내 보내지 않으므로 가져 오기가 실패한다는 것입니다. 시퀀스가있는 기본 키를 사용하지 않는 단일 프로덕션 PG 데이터베이스를 알지 못합니다. 절반의 답이며 질문에 철저히 대답하지 못하며 단일 테이블을 내보내거나 가져 오려면 추가 작업이 필요합니다.
user10664542
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.