2년 전에 작성해놨던 문서인데 내용이 워낙 부실해 공유를 할까말까 하다가 제 블로그에 공유하게 되는군요.
----------------------------------------------------------------------------------------
리눅스상에 Postgres 설치해서 JDBC 셋팅하기 * 준비사항
jdk1.3.X(postgres 7.2.2에서는 jdk1.4를 사용할 경우 컴파일 에러가 납니다.)
jakarta ant
j2sdkee
postres 7.2.2 소스버전
1. http://www.postgresql.org에서 postgres를 소스 버전으로 다운 받는다.
요즘 유행하는 패키지(RPM)를 구하긴 했었는데 의존성 문제로 포기했음.
예전에 의존성 문제로 죽는줄 알아서 -_-
2. 루트계정으로 접속해 소스 압축을 풀어준다.
/usr/local/tar xzvf postgresql-7.2.1.tar.gz 3. 설치 하기 전에 환경 설정해주기
위치는 /usr/local/pgsql로 odbc와 jdbc 드라이버를 함께 설치해야 함.
그리고 jdbc드라이버의 컴파일을 ant로 하기 때문에 ant가 깔려있어야 합니다.
./configure --prefix=/usr/local/pgsql --enable-locale --enable-multibyte --enable-nls --enable-odbc --with-java
(enable-multibyte 안하시면 UTF-8 개발 쫑~ 입니다.) 4. 컴파일
gmake 5. 컴파일 검사. (본인은 DB 초기화시에 에러가 났으나 문제는 없음)
gmake check 6. 설치
gmake install 여기서 끝난게 아닙니다.
관리 계정을 추가하고 공유라이브러리를 셋팅하고 DB스페이스(거대한 통짜DB)와 사용자별DB를 생성해야 합니다.
7. 관리 계정 추가하기
adduser postgres 8. 공유라이브러리 셋팅하기
bash의 경우 .bash_profile에 다음과 같이 설정합니다.
LD_LIBRARY_PATH=/usr/local/pgsql/lib
export LD_LIBRARY_PATH
쉘 상에서 여러명이 DB를 사용할테니 /etc/profile에 설정하는게 좋겠죠? 9. DB스페이스 생성하기
DB스페이스가 설치될 디렉토리를 만들고
mkdir /usr/local/pgsql/data
DB스페이스 디렉토리의 소유자를 관리 계정으로 바꾸고
chown postgres /usr/local/pgsql/data 계정을 관리 계정으로 바꿔서
su -l postgres DB스페이스를 생성합니다.
/usr/local/pgsql/bin/initdb -E EUC_KR -D /usr/local/pgsql/data
-E옵션은 한글 정렬을 위해 반드시 넣어야 합니다.
제대로 설치했다면 다음과 같은 메세지가 뜰 겁니다.
[zodiac:postgres]~ # /usr/local/pgsql/bin/initdb -E EUC_KR -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
Fixing permissions on existing directory /usr/local/pgsql/data... ok
creating directory /usr/local/pgsql/data/base... ok
creating directory /usr/local/pgsql/data/global... ok
creating directory /usr/local/pgsql/data/pg_xlog... ok
creating directory /usr/local/pgsql/data/pg_clog... ok
creating template1 database in /usr/local/pgsql/data/base/1... ok
creating configuration files... ok
initializing pg_shadow... ok
enabling unlimited row size for system tables... ok
creating system views... ok
loading pg_description... ok
vacuuming database template1... ok
copying template1 to template0... ok Success. You can now start the database server using: /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
or
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start 만약 사용자를 바꾸는걸 깜빡 했다면
[zodiac:postgres]/usr/local # /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process. creating directory /usr/local/pgsql/data... mkdir: cannot create directory `/usr/local/pgsql/data': 허가 거부됨 initdb failed.
아마도 이런 메세지가 뜨겠지요. 자 그럼 DB를 시작시켜 봅시다.
DB를 * 시작하기
/usr/local/pgsql/bin/postmaster -i -D /usr/local/pgsql/data
-i옵션은 TCP/IP접속을 허용합니다. 외부에서 접속한다면 당연히 해야겠죠? 매번 하기 귀찮으면 관리 계정의 .bash_profile에 다음과 같이 설정합니다.
export PGDATA=/usr/local/pgsql/data
그러면 다음부터는
/usr/local/pgsql/bin/postmaster -i
이것만 하셔도 DB가 시작됩니다. * 중지하기
pgsql/bin/pg_ctl stop
이전 버전에 따라서는 그냥 kill 시켜야 되는 것도 있습니다. 10. 인제 진짜 마지막입니다.
물리DB를 계정별로 쪼개 쓸 논리공간을 할당을 해야 합니다.
관리 계정으로 /usr/local/pgsql/bin으로 이동해서 사용자 DB를 만듭시다.
/usr/local/pgsql/bin/createdb postgres
만약 DB를 시작하지 않고 사용자 DB를 만들었다면 다음과 같은 메세지가 뜹니다.
[zodiac:postgres]/usr/local/pgsql/bin # createdb postgres
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
createdb: database creation failed 그리고 이전에 postgres를 설치하셨던 분들이 자주 부딪치는 에러는..
[zodiac:postgres]/usr/local/pgsql/bin # ./postmaster
FATAL 1: Can't read lock file /tmp/.s.PGSQL.5432.lock: Permission denied 루트로 접속 후 /tmp에 가서 .s.PGSQL로 시작되는 파일을 전부 제거해 주시면 해결됩니다. 그다음에 JDBC 드라이버 사용을 위해 /etc/profile에 classpath를 추가합니다.
추가항목: /usr/local/pgsql/share/java/postgresql.jar 11. 연습으로 쓰실거라면 이게 전부지만..
서비스를 한다면 접속부분을 정의해야 되겠죠?
그러기에 앞서 pgsql을 실행하고 관리계정의 암호를 지정해 줍니다. alter user postgres with password '패스워드'; 그리고 psql터미널을 종료한 후
pgsql/data/pg_hba.conf의 접속옵션 부분을 다음과 같이 변경합니다.
(postgres는 초기설정상 패스워드 입력으로는 터미널 접속을 불허하도록 되어 있습니다.) local all all password
host all all 0.0.0.0 0.0.0.0 password 그다음에 pgsql/bin/pg_ctl reload를 수행해 갱신합니다.
그러면 그다음 부터는 접속시 패스워드를 넣어야 접속이 가능해집니다. 이상으로 설치를 마칩니다.
위의 설정에서 내부 로케일 변환 문제가 발생되었습니다. 설치시 다음과 같이 변경하세요. // 현재 시스템의 한글 설정상태 확인 [server1:main]~ # echo $LANG
ko_KR
//db 초기화에 다국어 셋팅하기 [server1:main]~ # initdb -no-locale --lc-collate=C -E utf-8
[server1:main]~ # createdb -E utf-8 testdb
이렇게 하면 클라이언트 터미널에서 문제가 생길겁니다. 다음과 같이 셋팅하여 UTF-8을 클라이언트에서 지원하도록 합시다. set client_encoding = 'uhc'; |
0