PostgreSQL | 스키마(Schema) | 스키마 생성(CREATE SCHEMA)

CREATE SCHEMA 명령을 사용하여 PostgreSQL로 스키마를 새로 만드는 방법을 설명한다.

새로운 스키마 생성

스키마를 만들려면 CREATE SCHEMA 명령을 사용한다. 형식은 다음과 같다.

CREATE SCHEMA schema_name

스키마 이름(schema_name)를 지정하여 현재 연결된 데이터베이스에 새 스키마를 만든다. 스키마 이름은 임의의 이름을 지정할 수 있지만, pg_로 시작하는 이름은 특별한 의미를 가지므로 사용할 수 없다.

스키마를 생성하려면 명령을 실행하는 역할이 수퍼 유저이거나 스키마를 만들 데이터베이스에서 CREATE 권한을 가지고 있어야한다.

그러면 실제로 해보도록 하자. 스키마를 생성할 데이터베이스에 연결한다. 이번에는 devkuma 데이터베이스에 스키마를 만든다.

postgres=# \c devkuma
접속정보: 데이터베이스="devkuma", 사용자="postgres".
devkuma=#

devkuma 데이터베이스에 현재 생성된 스키마를 확인하기 위해 psql 메타 명령 \dn 명령을 실행한다.

devkuma=# \dn
스키마(schema) 목록
  이름  |  소유주
--------+----------
 public | postgres
(1개 행)


devkuma=#

기본적으로 생성되는 public 스키마가 생성되어있는 것을 확인할 수 있다.

그러면 새로운 스키마를 만든다. 다음과 같이 실행한다.

devkuma=# create schema myschema;
CREATE SCHEMA
devkuma=#

새로운 스키마가 작성되었다. 확인을 위해 다시 \dn 명령을 실행한다.

devkuma=# \dn
 스키마(schema) 목록
   이름   |  소유주
----------+----------
 myschema | postgres
 public   | postgres
(2개 행)


devkuma=#

myschema 스키마가 생성되어있는 것을 확인할 수 있다.

생성할 스키마의 소유자 지정

스키마를 작성한 경우 작성된 스키마의 소유자는 스키마를 만든 역할되지만 소유자로 다른 역할을 지정하여 스키마를 만들 수 있다. 형식은 다음과 같다.

CREATE SCHEMA schema_name AUTHORIZATION role_specification

스키마 이름 (schema_name)과 스키마의 소유자(role_specification)를 지정해 새로운 스키마를 만든다. 이 형식으로 스키마를 만들려면 명령을 수행하는 역할이 소유하는 롤의 직접 또는 간접적인 구성원이거나 수퍼 유저이여야 한다.

그러면 실제로 해보록 하자. 스키마를 만들 데이터베이스에 연결한 후 다음과 같이 실행한다.

devkuma=# create schema orange_schema authorization orange;
CREATE SCHEMA
devkuma=# 

moorangemo 역할을 소유자로 orange_schema 스키마를 작성하였다. 확인을 위해 \dn 명령을 실행한다.

devkuma=# \dn
   스키마(schema) 목록
     이름      |  소유주
---------------+----------
 myschema      | postgres
 orange_schema | orange
 public        | postgres
(3개 행)


devkuma=#

이미 생성된 스키마 이외에 orange 역할이 소유자인 orange_schema가 새로 생성되어 있는 것을 확인할 수 있다.

새로운 스키마를 생성할때 스키마에 테이블과 같은 개체를 생성하기

새로운 스키마를 만들 때, 스키마에 테이블이나 인덱스와 같은 개체를 동시에 만들 수 있다. 형식은 다음과 같다.

CREATE SCHEMA schema_name
  [ AUTHORIZATION role_specification ] 
  schema_element [ ... ]

schema_element에 동시에 작성하는 SQL 명령을 작성한다. 작성할 수 있는 명령은 CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER, GRANT 중 하나이다. 여러 명령을 하는 경우에는 SQL 명령의 마지막에 세미콜론 (;)을 하지 말아야 한다.

그러면 실제로 해보록 하자. 스키마를 생성할 때 데이터베이스에 연결한 후 다음과 같이 실행한다.

devkuma=# create schema testschema create table testtbl (id integer);
CREATE SCHEMA
devkuma=#

testschema 스키마를 생성하고 생성된 스키마에 testtbl 테이블을 만들었다. 확인을 위해 \dt 명령을 실행한다.

devkuma=# \dt testschema.*
         릴레이션(relation) 목록
   스키마   |  이름   |  종류  |  소유주
------------+---------+--------+----------
 testschema | testtbl | 테이블 | postgres
(1개 행)


devkuma=#

만든 testschema에 testtbl 테이블이 생성되어 있는 것을 확인할 수 있다.

여기까지 CREATE SCHEMA 명령을 사용하여 새 스키마를 만드는 방법에 대해 알아보았다.