PostgreSQL TABLESPACE
TABLESPACE 는 데이터베이스 객체가 파일 시스템상에 저장되는 물리적인 공간을 의미한다.
ORACLE 이나 PostgreSQL 에서만 사용되는 용어이다.
※ SQL-Server, MySQL, Sybase 에서는 사용하지 않는 생소한(?) 용어다.
테이블스페이스를 생성하면 데이터베이스 생성 시 별도의 LOCATION 을 지정할 수 있다.
테이블스페이스를 이용하여 데이터베이스의 목적에 따라 저장소를 다르게 사용하는 운영이 가능해 지며,
장애 대응 및 복구 등의 용도로도 활용이 가능하다.
TABLESPACE 생성과 DATABASE 생성 관련 간단한 예제를 통해 확인해 보도록 하겠다.
- TABLESPACE 에서 사용할 LOCATION 에 해당하는 디렉토리가 존재해야 하며 디렉토리에 대한 ownership 이 있어야 한다.
-- 존재하지 않는 디렉토리일 경우 에러발생
CREATE TABLESPACE tbs1
LOCATION 'D:\tablespace\tbs_what?';
********** Error **********
ERROR: directory "D:/tablespace/tbs_what?" does not exist
SQL state: 58P01
- TABLESPACE 를 생성
CREATE TABLESPACE tbs1
LOCATION 'D:\tablespace\tbs1';
Synopsis :
CREATE TABLESPACE tablespace_name
[ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
LOCATION ’directory’
[ WITH ( tablespace_option = value [, ... ] ) ]
- DATABASE 생성
CREATE DATABASE mydb
WITH TABLESPACE = tbs1;
Synopsis :
CREATE DATABASE name
[ [ WITH ] [ OWNER [=] user_name ]
[ TEMPLATE [=] template ]
[ ENCODING [=] encoding ]
[ LC_COLLATE [=] lc_collate ]
[ LC_CTYPE [=] lc_ctype ]
[ TABLESPACE [=] tablespace_name ]
[ ALLOW_CONNECTIONS [=] allowconn ]
[ CONNECTION LIMIT [=] connlimit ] ]
[ IS_TEMPLATE [=] istemplate ]
- Sybase 의 경우 DISK INIT 명령어로 Device 를 생성하고 CREATE DATABASE 를 실행한다.
DISK INIT NAME='mydisk_dat'
physname='/dev/mydisk_dat'
size='300M'
go
DISK INIT NAME='mydisk_log'
physname='/dev/mydisk_log'
size='30M'
go
CREATE DATABASE pubs
ON mydisk_dat = 300
LOG ON mydisk_log = 30
GO
- SQL-SERVER 는 CREATE DATABASE 구문에 ON / LOG ON 옵션에서 DISK 에 대한 정보를 기재한다.
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
출처 : https://msdn.microsoft.com/ko-kr/library/ms176061.aspx