[Postgresql] for mysql 사용자 Computer Tip

최근 필요에 따라 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 대비 명령을 내릴 수 있습니다.

MySQLPostgreSQLDescription
mysql -u<user> -p<password <database>psql -U<user> -P<password> <database>Start command line client, and connect to <database>
SHOW DATABASES;\lShow available databases
SHOW TABLES;\dtShow 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)\qQuit 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을 이용해 보기로 결심합니다.



덧글

댓글 입력 영역

구글애드텍스트