Docker로 PostgreSQL 실행하기

Docker

사용하기 편하도록 컨테이너 이름과 필수 환경변수인 POSTGRES_PASSWORD를 지정한다. 해당 비밀번호는 superuser 비밀번호로 사용된다. 그외에 환경변는 POSTGRES_USER, POSTGRES_DB 등이 있으며 postgres 도커 공식 이미지에서 더 자세히 확인할 수 있다.

$ docker run -p 5432:5432 --name {container_name} -e POSTGRES_PASSWORD={password} -d postgres

실행되고 있는 postgreSQL 컨테이너에서 명령어를 실행할 수 있도록 아래 명령어 입력한다.

$ docker exec -it {container_name} /bin/bash

CLI

컨테이너에 접속하게 되면 root@{container_id}:/# 이라고 뜨게 된다. postgres 계정으로 연결을 시도한다.

root@88ab21c1353c:/# psql -U postgres
postgres=#

User

새로운 사용자 계정이 필요할 경우 아래 명령어로 생성할 수 있다. 그리고 필요에 따라 SUPERUSER,CREATEDB 등의 권한을 주거나 NOCREATEDB, NOCREATEUSER 등으로 해당 작업을 못하게 할 수도 있다.

  • CREATEDB, NOCREATEDB : CREATEDB를 사용하여 사용자에게 DB 생성 능력을 줄 수 있으며 NOCREATEDB는 사용자가 DB를 생성할 수 있는 능을 주지 않는다. 명시되지 않을 경우 NOCREATEDB가 기본값이다.
  • CREATEUSER, NOCREATEUSER : CREATEUSER는 사용자에게 다른 사용자를 생성할 수 있게 하며 사용자를 superuser로 만든다. 명시되지 않을 경우, NOCREATEUSER가 기본값이다.
postgres=# CREATE USER {user_name} PASSWORD '{password}';
postgres=# CREATE USER {user_name} PASSWORD '{password}' CREATEDB;

사용자를 생성한 후에는 아래 명령어로 전체 사용자를 조회해서 확인한다. 역할(Role) 목록이라는 테이블에서 역할 이름, 속성 컬럼에서 사용자 이름과 권한을 확인할 수 있다.

postgres=# \du

생성했던 사용자를 지우고 싶을 경우에는 아래 명령어를 사용할 수 있다.

postgres=# DROP USER {user_name};

위의 명령어를 실행했을 때 아래처럼 나온다면 해당 사용자가 owner로 설정된 데이터베이스가 있기 때문에 owner 설정을 바꾼 후에 삭제하도록 해야한다.

ERROR: role "{user_name}" cannot be dropped becasue some objects depend on it
DETAIL: owner of databse {db_name}

참조: PostgreSQL CREATE USER 문서

Database

이제 데이터베이스를 생성해보도록 한다. 데이터베이스를 생성할 때는 dbowner를 지정해줄수도 있다. 지정하지 않을 경우에는 명령어를 실행하는 사용자가 owner로 지정된다. \l 명령어로 데이터베이스 목록을 조회하면 데이터베이스 이름과 함께 owner, encoding 등의 정보를 확인할 수 있다. owner를 바꾸고 싶을 때는 Alter 명령어를 통해 바꿀 수 있다. 이 또한 명령어를 실행한 후에 데이터베이스 목록 조회를 한 후 확인할 수 있다.

postgres=# CREATE DATABASE {db_name};
postgres=# CREATE DATABASE {db_name} OWNER {other_user};
postgres=# \l
postgres=# ALTER DATABASE {db_name} OWNER TO {user_name};

참조: PostgreSQL CREATE DATABASE 문서