본문 바로가기

PostgreSQL

PostgreSQL TABLESPACE

TABLESPACE

COMMAND

테이블 스페이스 생성

CREATE TABLESPACE fastspace LOCATION '/ssd1/postgresql/data';
CREATE TABLESPACE tablespace_name
    [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
    LOCATION 'directory'
    [ WITH ( tablespace_option = value [, ... ] ) ]

tablespace_option 에는 seq_page_cost, random_page_cost, effective_io_concurrency 를 사용할 수 있습니다.

해당 옵션을 지정하는 경우 해당 옵션과 동일한 이름의 parameter 에 셋팅 된 값을 OVERRIDE 합니다.

(COST 계산에 사용됨)

오라클과 달리 사이즈 셋팅이 없습니다.

테이블 스페이스 변경

ALTER TABLESPACE name RENAME TO new_name
ALTER TABLESPACE name OWNER TO new_owner
ALTER TABLESPACE name SET ( tablespace_option = value [, ... ] )
ALTER TABLESPACE name RESET ( tablespace_option [, ... ] )

기존 테이블 스페이스에 새로운 저장공간을 할당하는 기능이 없습니다.

다시 말해 사용한 경로의 마운트 포인트가 유일무이한 저장 공간이 됩니다.

테이블 스페이스 사용

CREATE TABLE foo(i int) TABLESPACE space1;

 

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table [ USING method ]
    ( { column | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace ]
    [ WHERE predicate ]

DEFAULT 테이블 스페이스 지정

SET default_tablespace = space1;

테이블스페이스 조회

SELECT spcname FROM pg_tablespace;

테이블 스페이스 사용에 있어 유의점

  • 테이블 스페이스가 위치할 마운트 경로는 PostgreSQL 만 사용합니다.
    해당 경로에 다른 파일이 있는 경우 사이즈로 인해 공간 가용성을 저해하는 결과로 이어집니다.
  • 효율적인 공간사용을 위해서는 오브젝트 종류에 상관없이 ( DATA, INDEX ) 한 테이블 스페이스만 사용하는 것이 효율적입니다.