CREATE TABLESPACE

CREATE TABLESPACE

디스크가 여러 개 달려 있는데, 특정 테이블만 더 빠른 디스크에 두고 싶다면 어떻게 할까요? CREATE TABLESPACE가 그런 상황에서 쓰는 명령이에요. 데이터베이스 객체(테이블·인덱스 같은)의 데이터 파일이 놓일 수 있는 파일 시스템의 대체 위치를 새로 등록해 줘요. 클러스터 전역에 걸친 테이블스페이스가 만들어지고, 이름은 데이터베이스 클러스터 안의 기존 테이블스페이스 이름과 달라야 해요.

적절한 권한이 있는 사용자는 tablespace_nameCREATE DATABASE, CREATE TABLE, CREATE INDEX, ADD CONSTRAINT에 넘겨서 해당 객체의 데이터 파일이 지정된 테이블스페이스에 저장되게 할 수 있어요.

주의: 테이블스페이스는 정의된 클러스터와 독립적으로 사용할 수 없어요. 22.6절을 참고하세요.

출처: PostgreSQL 문서

본문

Synopsis

CREATE TABLESPACE tablespace_name
    [ OWNER { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ]
    LOCATION 'directory'
    [ WITH ( tablespace_option = value [, ... ] ) ]

Description

CREATE TABLESPACE는 새 클러스터 전역 테이블스페이스를 등록해요. 테이블스페이스 이름은 데이터베이스 클러스터 안의 기존 테이블스페이스 이름과 달라야 해요.

테이블스페이스는 슈퍼유저가 테이블·인덱스 같은 데이터베이스 객체를 담은 데이터 파일이 놓일 파일 시스템의 대체 위치를 정의할 수 있게 해 줘요.

적절한 권한이 있는 사용자는 tablespace_nameCREATE DATABASE, CREATE TABLE, CREATE INDEX, ADD CONSTRAINT에 넘겨서 이 객체들의 데이터 파일이 지정된 테이블스페이스에 저장되게 할 수 있어요.

주의: 테이블스페이스는 정의된 클러스터와 독립적으로 사용할 수 없어요. 22.6절을 참고하세요.

Parameters

tablespace_name

만들 테이블스페이스의 이름이에요. pg_로 시작할 수 없어요. 그런 이름은 시스템 테이블스페이스용으로 예약되어 있기 때문이에요.

user_name

테이블스페이스를 소유할 사용자의 이름이에요. 생략하면 명령을 실행한 사용자로 기본 설정돼요. 테이블스페이스를 만들 수 있는 건 슈퍼유저뿐이지만, 테이블스페이스의 소유권을 비-슈퍼유저에게 넘길 수는 있어요.

directory

테이블스페이스에 사용될 디렉터리예요. 디렉터리는 이미 존재해야 하고(CREATE TABLESPACE가 만들지 않아요), 비어 있어야 하며, PostgreSQL 시스템 사용자가 소유해야 해요. 디렉터리는 절대 경로 이름으로 지정해야 해요.

tablespace_option

설정하거나 초기화할 테이블스페이스 매개변수예요. 현재 사용 가능한 매개변수는 seq_page_cost, random_page_cost, effective_io_concurrency, maintenance_io_concurrency뿐이에요. 특정 테이블스페이스에 이 값들을 설정하면, 해당 테이블스페이스의 테이블에서 페이지를 읽는 비용과 동시에 발행되는 I/O 수에 대한 플래너의 평소 추정치를, 같은 이름의 구성 매개변수(seq_page_cost, random_page_cost, effective_io_concurrency, maintenance_io_concurrency 참고)가 정한 값으로 덮어써요. 특정 테이블스페이스가 I/O 서브시스템의 나머지보다 빠르거나 느린 디스크에 있으면 유용할 수 있어요.

Notes

CREATE TABLESPACE는 트랜잭션 블록 안에서 실행할 수 없어요.

Examples

파일 시스템 위치 /data/dbs에 테이블스페이스 dbspace를 만들려면, 먼저 운영 체제 기능으로 디렉터리를 만들고 올바른 소유권을 설정해요.

mkdir /data/dbs
chown postgres:postgres /data/dbs

그다음 PostgreSQL 안에서 테이블스페이스 생성 명령을 실행해요.

CREATE TABLESPACE dbspace LOCATION '/data/dbs';

다른 데이터베이스 사용자가 소유한 테이블스페이스를 만들려면 이런 명령을 써요.

CREATE TABLESPACE indexspace OWNER genevieve LOCATION '/data/indexes';

Compatibility

CREATE TABLESPACE는 PostgreSQL 확장 기능이에요.

더 알아보기 (Learn more)

  • ALTER TABLESPACE — 테이블스페이스의 정의·소유자를 바꿀 때 써요.
  • DROP TABLESPACE — 테이블스페이스를 삭제할 때 써요.
  • Tablespaces — 테이블스페이스 관리에 대한 22.6절이에요.
  • CREATE TABLE — 테이블을 만들고 테이블스페이스를 지정할 때 써요.