CREATE TABLESPACE — 새 테이블스페이스 정의
CREATE TABLESPACE테이블스페이스이름
[ OWNER {새소유주
| CURRENT_USER | SESSION_USER } ] LOCATION '디렉터리
' [ WITH (테이블스페이스옵션
=값
[, ... ] ) ]
CREATE TABLESPACE
명령은 데이베이스 전역 테이블스페이스를
만든다. 해당 테이블스페이스 이름은 데이터베이스 클러스터 내에 유일해야
한다.
테이블스페이스란 OS 파일 시스템과 연결해서, 데이터 파일(테이블이나 인덱스)을 기본 데이터 디렉터리가 아닌 다른 디렉터리에 보관될 수 있도록 한다.
테이블스페이스이름
으로
지정한 테이블스페이스를
CREATE DATABASE
, CREATE TABLE
,
CREATE INDEX
또는 ADD CONSTRAINT
명령에서
테이블스페이스를 지정한다면, 그 위치에 자료를 쓸 수 있도록
적당한 권한이 명령을 실행하는 사용자에게 부여되어 있어야 한다.
테이블스페이스는 해당 클러스터와 분리해서 독립적으로 사용될 수 없다. 22.6절 참고.
테이블스페이스이름
만들 새 테이블스페이스 이름. 이 이름은 pg_
로
시작할 수 없다. 이 이름은 시스템 내부 테이블스페이스로 사용된다.
새소유주
해당 테이블스페이스의 소유주가 될 사용자 이름. 생략하면 이 명령을 실행하는 사용자가 소유주가 된다. 테이블스페이스는 슈퍼유저만 만들 수 있으나, 만들 때 일반 사용자를 소유주로 지정할 수는 있다.
디렉터리
해당 테이블스페이스와 연결 될 디렉터리 경로 이름.
이 디렉터리 안에는 아무 것도 없어야 하며,
그 디렉터리의 OS 소유주는 PostgreSQL 서버를
실행하는 OS 사용자와 같아야 한다. 경로 이름은 절대경로 여야 한다.
CREATE TABLESPACE
명령으로 이 디렉터리가
자동으로 만들어지지는 않는다. 직접 미리 만들어야 한다.
테이블스페이스옵션
해당 테이블스페이스에 대한 옵션을 지정.
현재 지원하는 옵션은 seq_page_cost
,
random_page_cost
, effective_io_concurrency
,
maintenance_io_concurrency
이다.
이 설정들은 실행 계획기가 페이지 읽기 비용을 예상할 때
그 개체가 이 테이블스페이스가 있다면 여기서 지정한 값을 사용해서
비용을 계산하도록 한다.
(각 seq_page_cost,
random_page_cost,
effective_io_concurrency,
maintenance_io_concurrency 환경 설정 변수 참조).
각 개별 테이블스페이스 별로 지정한 설정은 전역 설정보다 우선 순위가 높다.
이 옵션들은 해당 디렉터리가 기본 디렉터리와 다른 I/O 성능으로
운영 될 때 유용하게 사용된다.
테이블스페이스는 심볼릭 링크를 지원하는 OS에서만 사용할 수 있다.
CREATE TABLESPACE
명령은 트랜잭션 블럭 안에서는 사용할 수 없다.
/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';
CREATE TABLESPACE
구문은 PostgreSQL
확장형이다.