rastalion.dev
POSTGRESQL

PostgreSQL DB 생성 및 삭제

teinam 2019-02-24updated 09-20 2 MIN

PostgreSQL을 관리하는 방법은 크게 두 가지입니다.

  • 터미널 명령줄 (psql, createdb, dropdb)
  • GUI 도구 (pgAdmin, DBeaver 등)

데이터베이스 생성

SQL 구문

CREATE DATABASE name
    [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ STRATEGY [=] strategy ]
           [ LOCALE [=] locale ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ BUILTIN_LOCALE [=] builtin_locale ]
           [ ICU_LOCALE [=] icu_locale ]
           [ ICU_RULES [=] icu_rules ]
           [ LOCALE_PROVIDER [=] locale_provider ]
           [ COLLATION_VERSION = collation_version ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ]
           [ OID [=] oid ]

주요 옵션:

옵션 설명
OWNER 데이터베이스 소유자 (기본값: 현재 사용자)
TEMPLATE 복사할 템플릿 데이터베이스 (기본값: template1)
ENCODING 문자 인코딩 (예: UTF8)
LOCALE 기본 로케일 설정
TABLESPACE 데이터 파일을 저장할 테이블스페이스
CONNECTION LIMIT 최대 동시 접속 수 (-1은 무제한)
STRATEGY 복사 전략 (WAL_LOG 또는 FILE_COPY)

셸 명령으로 생성

$ createdb mydb

createdbCREATE DATABASE를 감싸는 편의 명령입니다. 데이터베이스를 생성한 뒤 psql로 접속할 수 있습니다.

$ psql mydb
Type "help" for help.

mydb=#

데이터베이스에서 빠져나가려면 \q를 입력합니다.

SQL 명령으로 생성

psql에서 직접 SQL 명령을 실행할 수도 있습니다.

postgres=# CREATE DATABASE mydb2;
CREATE DATABASE

postgres=# CREATE DATABASE sales 
           OWNER salesapp 
           ENCODING 'UTF8' 
           LOCALE 'en_US.UTF-8';
CREATE DATABASE

데이터베이스 삭제

SQL 구문

DROP DATABASE [ IF EXISTS ] name [ [ WITH ] ( FORCE ) ]
  • IF EXISTS: 데이터베이스가 없어도 오류를 발생시키지 않고 NOTICE만 출력합니다.
  • FORCE: 해당 데이터베이스에 연결된 모든 세션을 강제 종료한 뒤 삭제합니다 (PostgreSQL 13+).

WARNINGDROP DATABASE는 되돌릴 수 없습니다. 데이터 디렉토리와 카탈로그가 모두 삭제됩니다.

셸 명령으로 삭제

$ dropdb mydb

SQL 명령으로 삭제

-- 기본 삭제 (다른 세션이 연결돼 있으면 실패)
DROP DATABASE mydb2;

-- 없어도 오류 없이 진행
DROP DATABASE IF EXISTS mydb2;

-- 연결된 세션을 강제 종료하고 삭제
DROP DATABASE mydb WITH (FORCE);

NOTE — 삭제하려는 데이터베이스에 접속한 상태에서는 삭제할 수 없습니다. postgres 데이터베이스나 다른 데이터베이스로 전환한 뒤 삭제하세요.

Database 목록 확인

\l 명령으로 데이터베이스 리스트를 확인할 수 있습니다.

postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 mydb      | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)
Advertisement