postgresql 데이터를 다른 드라이브로 이동


20

클라우드 환경으로 AWS를 사용하고 있습니다. 루트 인스턴스 볼륨과 동일한 드라이브에 PostgreSQL을 설치했습니다. 두 번째 드라이브를 인스턴스에 연결하고 마운트했습니다. 이제 모든 PostgreSQL 데이터를 다른 드라이브로 옮기고 싶습니다. 아직 개발 모드에 있으므로이 시점에서 이전이 더 쉬워지면 이전 데이터를 삭제할 수 있습니다. 가장 좋은 방법은 무엇입니까?

PostgreSQL 테이블 스페이스는 내가보아야 할 것입니까?


1
데이터베이스의 일부 를 별도의 드라이브 로 옮기려면 테이블 스페이스를 사용하는 것이 좋습니다 .
Erwin Brandstetter

이 답변은 그 제안 tablespaces해야 하지 : 외장 하드 드라이브에 이동 dba.stackexchange.com/a/62037/41823가 있는지 나는 위험을 이해하지 이미 외부에 데이터를 넣는다면?
Statwonk 2016 년

답변:


19

다음과 같이해야합니다.

  1. PostgreSQL 종료
  2. PostgreSQL이 더 이상 실행되지 않는지 확인하십시오
  3. PostgreSQL이 실제로 중지되었는지 확인
  4. 기존 데이터 디렉토리를 새 드라이브에 복사
    이것은 일반적으로 -D서비스 의 명령 행 매개 변수 ( ) 또는 PGDATA환경 변수를 통해 정의됩니다.
  5. 새 데이터 디렉토리를 가리 키도록 PostgreSQL 구성 (서비스, 환경 var)을 업데이트하십시오.
  6. 데이터를 복사 한 경우 이전 데이터 디렉토리의 이름을 바꾸어 PostgreSQL이 더 이상 찾을 수 없도록하십시오. 이렇게하면 구성이 제대로되지 않으면 오류 메시지가 나타납니다.
  7. 서비스 시작
  8. 모든 것이 제대로 작동하면 이전 디렉토리를 삭제할 수 있습니다.

네 번째로 '이것은 일반적으로 명령 줄 매개 변수를 통해 정의됩니다 ...'는 무엇을 의미합니까?
codecool

@codecool : 이것을 정의하는 방법에는 여러 가지가 있습니다. 일반적으로 서비스 정의의 일부입니다. 그러나 운영 체제, 배포 및 개인 변경에 따라 다릅니다.
a_horse_with_no_name

이것은 효과가 있었지만 Windows 명령 줄 대신 regedit를 사용했습니다. 아휴. 내 디스크에 공간이 거의 없어졌지만 이제는 충분한 공간이있는 다른 곳에서 안전하게 작동합니다.
트렌치

다음은 구체적인 세부 사항, 일반적인 우분투 및 9.5 DB 버전에 대한 최신 단계별 블로그 게시물입니다. digitalocean.com/community/tutorials/…
JaakL

4
  1. postgresql 서비스 중지
  2. cp -a source_data_directory 대상 _data_directory
  3. chown -R postgres_user / destination_data_directory
  4. 내보내기 PGDATA = destination_data_directory
  5. postgresql.conf 내에서 데이터 디렉토리를 destination_data_directory로 변경
  6. pg_ctl 시작

chown새 폴더 의 명령을 기억하게되어 기쁩니다 .
RolandoMySQLDBA

0

다음은 Arch Linux에서 기존 PostgreSQL 데이터베이스를 새 위치 (폴더, 파티션)로 이동하는 방법에 대한 설명입니다 (이 절차는 다른 Linux 배포판과 유사해야 함).

pg_dumpall클러스터의 모든 PostgreSQL 데이터베이스를 하나의 스크립트 파일에 기록 (덤핑)하기위한 유틸리티입니다. ... pg_dump클러스터의 각 데이터베이스를 호출 하여이를 수행합니다. ...

예를 들면 다음과 같습니다.

## To dump all databases:
$ pg_dumpall > /tmp/db.out               ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile   ## backup a database

## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres

TL / DR

다음을 수행해야합니다.

  • 수출 ( pg_dumpall) 데이터베이스
  • 새로운 EMPTY 디렉토리 생성
  • postgresql.conf 파일 편집
  • postgres 서버 서비스를 다시 시작하십시오
  • 덤프 파일에서 새 데이터베이스로 오래된 데이터로드

명령 요약

진행할 때 어떤 쉘이 있는지 명확히하기 위해 쉘 프롬프트 (호스트 이름 ...)를 남겨두고 있습니다.

[victoria@victoria ~]$ postgres --version     ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;              ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/   ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
  ...
  May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
  ## added line:
  data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /var/lib/postgres/data   ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
  ## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
  SET
  SET
  SET
  CREATE ROLE
  ALTER ROLE
  [ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done!  :-D

주석이 달린 코드 및 출력 은 함께 제공되는 블로그 게시물 인 Arch Linux 에서 기존 PostgreSQL 데이터베이스를 이동하는 방법을 참조하십시오.


참고 문헌

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.