PostgreSQL 테이블 스페이스를 어떻게 이동합니까?


12

PostgreSQL 9.3 테이블 스페이스를 물리적으로 옮기는 방법 /old/dir/new/dir있습니까? 나는 단지 mv디렉토리를 원하고 PostgreSQL에게 테이블 스페이스가 현재 위치한다고 말하고 싶다 /new/dir. ALTER TABLESPACE이름 만 바꿀 수있는 것 같습니다 .

새 테이블 공간을 만들고 데이터베이스를 이동하지 않도록하고 싶습니다. 필자는 시간과 디스크 공간이 많이 필요한 느린 복사 프로세스라고 가정합니다. 또한에 대한 심볼릭 링크 /old/dir를 피하고 싶습니다 /new/dir.


/ old / dir을 veryold / dir로 이동하고 new / dir을 old / dir로 마운트하고, ver_old dir에서 old / dir로 데이터를 복사합니까?
simplexio

답변:


12

테이블 스페이스 이름이 tblspc입니다.

  1. 테이블 스페이스의 Oid 가져 오기
test = # oid_spcname에서 oid, spcname을 선택하십시오. spcname = 'tblspc';
  oid | spcname
------- + ---------
 24580 | tblspc
(1 행)
  1. postgres 중지
$ pg_ctl -D $ PGDATA 중지
  1. 이전 디렉토리에서 새로운 디렉토리로 디렉토리 이동
$ mv / old / dir / new / dir

또는

$ cp -r / old / dir / new / dir
$ rm -rf / old / dir
  1. 테이블 스페이스의 링크를 새 디렉토리로 변경
$ cd $ PGDATA / pg_tblspc
RM 24580 달러
$ ln -s / new / dir 24580
  1. postgres 시작
$ pg_ctl -D $ PGDATA 시작

그러면 테이블 스페이스의 디렉토리가 변경되었음을 알 수 있습니다.

test = # SELECT pg_tablespace_location (24580);
 pg_tablespace_location
------------------------
 / new / dir
(1 행)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.