- 작성시간 : 2016/05/09 10:11
- 퍼머링크 : mcchae.egloos.com/11216425
- 덧글수 : 0
최근 필요에 따라 MySQL(MariaDB) 계열 대신 Postgresql을 사용해야 했습니다.

아주 예전에 사용해 본 적이 있지만, 최근에 보니 처음에는 사뭇 다른점이 많았습니다.
우선 우분투 14.04 LTS에서 Postgresql 7.4 버전을 설치하는 방법입니다.
(14.04에서 시스템 디폴트 버전은 7.3.x 입니다)
$ cat build_postgresql-7.4.sh
#!/bin/bash
# ZEN MIPS 장비 포팅을 위하여 postgress 9.4.4 로 작업
dpkg -l | grep postgresql-9.4
if [ $? -ne 0 ];then
# 1) postgress 9.4.x 설치
# 1.1) Create file /etc/apt/sources.list.d/pgdg.list with content:
if [ ! -e /etc/apt/sources.list.d/pgdg.list ];then
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /tmp/pgdg.list
sudo mv -f /tmp/pgdg.list /etc/apt/sources.list.d/pgdg.list
fi
# 1.2) Import key and update repositories:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
# 1.3) And install PostgreSQL 9.4:
sudo apt-get install postgresql-9.4
else
echo "postgresql-9.4 already installed!"
fi
다음은 Client를 실행 등 mysql 대비 명령입니다.
위와 같이 설치하고 나서 mysql 과 같이 접속 클라이언트로 접속을 시도하면
$ psql
$ psql -d postgres
psql: FATAL: role "user" does not exist
와 같은 오류가 발생합니다.
이 이유는 해당 사용자가 해당 DB ROLE을 가지고 있지 않기 때문입니다.
위의 배치 끝 부분에,
# create user and role for future
PGUSER='user'
sudo -u postgres psql -c "DROP ROLE IF EXISTS $PGUSER"
sudo -u postgres psql -c "CREATE ROLE $PGUSER Superuser"
sudo -u postgres psql -c "ALTER ROLE $PGUSER WITH LOGIN"
## now you can "$ psql -d postgres"
를 추가합니다. ("user" 대신 자신의 계정 이름입니다)
$ psql
psql: FATAL: database "user" does not exist
와 같이 해당 DB가 없다고 나오네요. 아마 해당 사용자 계정명과 동일한 DB를 디폴트로 주나 봅니다.
$ psql -d postgres
와 같이 하여 접속합니다. (postgres 가 시스템 DB 입니다)
$ psql -d postgres
psql (9.4.7)
Type "help" for help.
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
user | Superuser | {}
postgres | Superuser, Create role, Create DB, Replication | {}
postgres=#
위와 같이 \du 명령으로 ROLE 목록을 확인할 수 있습니다.
다음은 위와같이 접속 되었을 때 아래와 같이 MySQL 대비 명령을 내릴 수 있습니다.
MySQL | PostgreSQL | Description |
---|---|---|
mysql -u<user> -p<password <database> | psql -U<user> -P<password> <database> | Start command line client, and connect to <database> |
SHOW DATABASES; | \l | Show available databases |
SHOW TABLES; | \dt | Show available tables |
USE <database>; | \c <database> | Connect to <database> |
DESCRIBE <table>; | \d <table> | Describe <table> structure |
SHOW FULL PROCESSLIST; | SELECT * FROM pg_stat_activity; | Show all running queries |
exit (or quit or \q) | \q | Quit the client |
그리고 다음은 SQL 등에 대한 차이점 입니다.
SELECT * FROM table WHERE column = "value"
위에 명령에서 "value" 대신 'value' 로 싱글' 를 이용해야 합니다.
ANSI SQL 의 표준은 싱글' 입니다.
또한 코멘트는 -- 입니다. mysql에서는 # 도 되는데 이것은 표준이 아닙니다.
mysql 에서는 디폴트로 대소문자 구별을 하지 않지만
postgresql 에서는 디폴트로 대소문자 구별을 한다고 합니다.
따라서 결과가 틀리다면
SELECT * FROM table WHERE lower(column) = 'value'
와 같은 식으로 해 보십시오.
그 다음은 Python 연동 관련된 부분입니다.
파이썬 드라이버 비교 에서 언급된 것과 같이,

다양한 파이썬 드라이버들이 있습니다.
결론적으로는 Psycopy2 또는 PyGreSQL 을 사용해야 되겠는데,
그나마 PyGreSQL이 최근에 나와 첫번째 Postgresql 용 드라이버로 통칭되는 것 같습니다.
PyGreSQL을 이용해 보기로 결심합니다.
태그 : mysql, postgresql
덧글