일반적인 PostgreSQL 환경 세팅 방법은 귀찮다.
Docker Hub에는 다양한 Image를 제공하고 있다.
PostgreSQL의 이미지 또한 당연히 존재하고 있으니, 이를 통해서 환경 세팅을 뚝딱 해보자.
Docker Hub에서는 다양한 버전의 PostgreSQL 이미지를 제공한다.
원하는 버전을 골라서 받아올 수 있지만,
일단 최신 버전을 사용하기로 한다. (:lastest
구문을 이용한다.)
$ docker pull postgres:latest
성공적으로 이미지를 받아온 것을 볼 수 있다.
image pull에 성공했는지 자세히 확인하고 싶다면 docker imagees
명령어를 이용한다.
이미지를 받아왔으니,
이를 이용하여 컨테이너를 생성하게 되면
PostgreSQL 환경 세팅을 완료할 수 있다.
$ docker run -p 5432:5432 --name test-postgres \
-e POSTGRES_USER=<ADMIN_NAME>
-e TZ=Asia/Seoul \
-e POSTGRES_PASSWORD=<ADMIN_PW> \
-v \home\testpostgres\pgdata \
-d postgres:latest
docker ps
명령어를 통해, 성공적으로 생성된 컨테이너를 확인할 수 있다.
--- mac, linux ...
docker exec -it test-postgres /bin/bash
--- windows (git bash의 경우)
winpty docker exec -it test-postgres sh
생성된 컨테이너의 ID를 확인하고, docker exec
명령어를 통해 컨테이너에 접속한다.
PostgreSQL 컨테이너 생성 및 실행, 접속까지 완료되었다.
컨테이너 접속 후, 기본적인 PostgreSQL 세팅을 진행해보자.
다음 명령어를 통해 PostgreSQL에 접속할 수 있다.
psql
명령어만 사용할 경우, root
name으로 접속된다.
아까 <ADMIN_NAME>
에 입력한 name으로 접속해보자.
$ psql -U <ADMIN_NAME>
새로운 계정을 만들기 위해서는 다음과 같은 명령어를 실행한다.
create role <USER_NAME> with login password <PASSWORD>;
계정에는 권한을 부여할 수 있다.
예를 들어, 다음과 같이 2가지의 권한 설정이 가능하다.
createdb
superuser
alter user <USER_NAME> with <ROLE>;
계정별로 지정된 권한은 \du
명령어를 통해 확인할 수 있다.
PostgreSQL의 특징으로는, Schema를 생성할 수 있다는 것이다.
하나의 DB에 하나의 Schema가 대응되는 개념이라고 볼 수 있다.
즉, DB = schema이지만, schema는 DB의 논리적인 개념이라고 생각된다.
public schema가 기본적으로 생성되어 있고,
table이 많아짐에 따라 여러 schema를 생성해서 관리하면 좋다.
다음 명령어를 통해 생성할 수 있다.
create schema <SCHEMA_NAME>;
특정 schema를 사용하고 싶을 땐 다음 명령어를 사용하면 된다.
set search_path to <SCHEMA_NAME>;
현재 사용 중인 schema는 다음 명령어를 통해 확인할 수 있다.
show search_path;
다음 명령어를 통해 DB를 생성할 수 있다.
생성된 DB 목록은 \l
명령어를 통해 확인할 수 있고,
\connect <DB_NAME>;
또는 \c <DB_NAME>;
명령어를 통해 DB에 접속할 수 있다.
create database <DB_NAME>;
create table <TABLE_NAME>(column1 type1 serial primary key, column2 type2 ...);
위 명령어는 기본 schema인 public schema에 저장된다.
특정 schema에 table을 생성하고 싶다면,
<TABLE_NAME>
이 아닌 <SCHEMA_NAME>.<TABLE_NAME>
으로 작성해야 한다.
생성된 table 목록은 \dt
명령어를 통해 확인할 수 있다.
💡
serial
키워드
- PostgreSQL에서 table을 생성할 때, 특정 컬럼을
serial
로 지정하는 건 기존 MySQL에서의 auto-increment와 동일한 기능을 한다.