들어가기

데이터베이스 PostgreSQL을 사용해보려고 한다

PostgreSQL이란?

PostgreSQL은 객체-관계형 데이터베이스 관리 시스템(ORDBMS)의 하나로, Post-gres-Q-L [포스트 그레스 큐 엘] 로 발음한다. 또한 BSD 라이센스로 배포되어 전세계 오픈소스 개발자들과 관련 기업들이 개발에 참여하고 있다

BSD 라이센스란?
BSD (Berkeley Software Distribution) 라이센스는 소프트웨어 라이센스라고도 할 수 없을 만큼 미약하여, 해당 소프트웨어는 아무나 개작할 수 있고, 수정한 것을 제한 없이 배포할 수 있다. 다만 수정본의 재배포는 의무적인 사항이 아니므로 BSD 라이선스를 갖는 프로그램은 공개하지 않아도 되는 상용 소프트웨어에서도 사용할 수 있다.

한마디로 무료로 사용할 수 있고 기능도 좋은 객체-관계형 데이터베이스이다

Document : http://postgresql.kr/docs/9.6/index.html

템플릿 데이터베이스

PostgreSQL에서 "CREATE DATABASE" SQL로 데이터베이스 생성시, 기본으로 만들어져 있는 Template1 데이터베이스를 복사해서 생성한다. 쉽게 말하자면 템플릿 데이터베이스는 원본인 셈이다.

템플릿 데이터베이스에는 Template1Template0 가 있는데, Template1은 데이터 구조를 수정하여 데이터베이스 생성시 적용하는 템플릿이고 Template0는 수정하지 않고 원본 그대로 유지하는 템플릿이다.

default로 template1을 복사하지만, 아래처럼 SQL문을 사용하면 template0를 복사하게 된다

$ CREATE DATABASE dbname TEMPLATE template0;

설치

Mac OSX 를 가정하고 진행한다
다른 플랫폼에서의 설치 및 사용법이 필요하면 간다하게 잘 정리되어있는 이 곳을 참고하자

편하게 설치 및 관리를 위해 brew 를 이용해 설치하자

$ brew install postgresql

기본방법으로 postgres 주소를 직접 다 입력해야하지만,
brew 를 이용하면 좀 더 편하게 입력 가능하다

실행

basic

$ pg_ctl -D /usr/local/var/postgres start

with brew

$ brew services start postgresql

PostgreSQL서버가 실행되었는지 확인하기위해 기본으로 생성되어있는 템플릿1 데이터베이스를 열어보자

$ psql template1

template1=#    // 이와 같이 나오면 서버가 잘 실행되고 있는 것이다

클라이언트에서 DB를 이용할 때는 psql 명령어를 사용한다

종료

basic

$ pg_ctl -D /usr/local/var/postgres stop

with brew

$ brew services stop postgresql

명령어

쿼리문이 아닌 명령어는 앞부분에 \ 를 붙이면 된다

postgres=# \q        # db client 종료
postgres=# \l        # 데이터베이스 목록 조회
postgres=# \du       # 계정 목록 조회

Query

계정 생성

데이터베이스를 사용하는 유저가 해당 데이터베이스의 모든 권한을 가지고 있으면 문제가 발생하기 때문에, 권한을 제한한 계정을 만들어 주어야한다.

postgres=# CREATE ROLE username WITH LOGIN PASSWORD 'password' [OPTIONS];

위의 쿼리문으로 계정을 만들어주자

[OPTIONS] :
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT 접속제한
| [ ENCRYPTED ] PASSWORD '비밀번호'
| VALID UNTIL '타임스탬프'
| IN ROLE 롤이름 [, ...]
| IN GROUP 롤이름 [, ...]
| ROLE 롤이름 [, ...]
| ADMIN 롤이름 [, ...]
| USER 롤이름 [, ...]
| SYSID uid

계정을 조회할 때는 아래의 명령어를 사용하면 된다

postgres=# \du

                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 client    |                                                            | {}

데이터 베이스 생성

테이블을 넣을 데이터베이스를 생성해주자

postgres=# CREATE DATABASE dbname;

데이터 베이스 선택

\connect 또는 줄여서 \c 를 사용할 수 있다

postgres=# \c dbname
--- 아래처럼 변경된다 ---
dbname=#   

테이블 조회

아마 Database Table의 약자인듯하다

dbname=# \dt