Postgresql 테이블을 복원하는 방법 2가지를 포스팅하려고 합니다.
첫 번째는 copy를 이용한 방법이고
두 번째는 pg_restore를 이용한 방법입니다.
copy는 단순히 데이터를 테이블에 복사하는 명령어입니다.
따라서 데이터를 복사할 대상 테이블이 먼저 있어야 합니다.
그리고 csv 파일을 copy 명령어를 통해 복원하면 됩니다.
하지만 저의 기대와 달리 위 화면처럼 에러 메시지가 표출되었습니다.
그 이유는 copy 명령어는 superuser, 즉 postgres 계정만 사용할 수 있기 때문입니다.
따라서 psql의 \copy 명령어를 사용해야 합니다.
psql로 데이터베이스에 접속한 뒤 \copy 명령어를 사용하면 데이터를 복원할 수 있습니다.
데이터가 제대로 복원되었는지 확인하겠습니다.
데이터가 제대로 복원된 것을 확인할 수 있습니다.
pg_restore는 pg_dump와 반대되는 개념으로 백업 파일을 데이터베이스에 복원하는 명령어입니다.
pg_restore 사용법은 "pg_restore [옵션] [파일]" 이렇게 사용하면 됩니다.
위의 이미지의 pg_restore 명령어를 크게 3가지로 나눠서 보게 되면
첫 번째 빨간색 상자는 pg_restore 명령어를 가리키고
두 번째 빨간색 상자는 pg_restore의 옵션을 가리킵니다.
(d : 접속할 데이터베이스, U: 연결하는 유저 ID, Fc : 백업 파일 형식, v : 자세한 정보 표출, W : 암호 입력 프롬프트 표출)
마지막 세 번째 빨간색 상자는 백업 dump 파일입니다.
위의 예처럼 pg_restore을 사용하는 방법은 크게 어렵지 않으나 한 가지 주의해야 할 점이 있습니다.
dump 파일을 만들 때 파일 형식을 지정해야 한다는 점입니다.
파일 형식을 지정하지 않은 dump 파일을 pg_restore를 통해 복원하려고 하면 다음과 같은 에러 메시지가 표출됩니다.
이와 같은 에러가 발생하는 원인으로는 해당 dump 파일이 일반 텍스트 형식(p, plain text)으로 만들어졌기 때문입니다.
*pg_dump 지원 파일 형식
(c : 사용자 지정, d : 디렉터리, t : tar, p : plain text)
*pg_restore 지원 파일 형식
(c : 사용자 지정, d : 디렉터리, t : tar)
이렇게 일반 텍스트 형식의 dump 파일은 pg_restore는 지원하지 않기 때문에 dump 파일을 만들 때 파일 형식을 지정해야 합니다.
위의 이미지처럼 -Fc 옵션을 추가한 dump 파일을 만들어서 pg_restore를 하게 되면 정상적으로 복원할 수 있습니다.
테이블이 제대로 복원되었는지 확인하겠습니다.
마찬가지로 데이터가 제대로 복원된 것을 확인할 수 있습니다.
지금까지 작성한 내용을 정리하면 테이블을 복원하는 방법은 크게 2가지인데
copy를 사용하는 방법과 pg_restore을 사용하는 방법이 있습니다.
copy를 사용하기 위해서는 먼저 대상 테이블이 있어야 하고, copy를 실행하는 계정이 어떤 계정인지 먼저 확인해야 합니다.
postgres 계정인 경우 바로 copy 명령어를 사용해도 되지만 그렇지 않은 계정이면 psql의 \copy 명령어를 사용해야 합니다.
따라서 단순히 데이터만 옮기는 경우에는 copy 명령어가 유용합니다.
pg_restore를 사용하는 경우 백업 dump 파일 형식이 어떻게 되어있는지 확인해야 합니다.
그리고 pg_restore는 테이블 정의와 데이터를 한 번에 복원할 수 있으므로
데이터만 옮기는 경우가 아닌 테이블 자체를 옮기는 경우에 사용하면 유용합니다.
'dev > 데이터베이스' 카테고리의 다른 글
dbeaver 스크립트 파일 위치 (0) | 2021.09.07 |
---|---|
PostgreSQL DATE_PART 함수 (0) | 2021.03.17 |
Windows postgis 설치 (0) | 2019.12.10 |
Windows PostgreSQL 설치 및 백업 (0) | 2019.12.10 |
pg_dump 사용법 (0) | 2019.09.02 |