PostgreSQL 6.4.2 설치 가이드(1999/01/10) - 정종갑(hipon@kitel.co.kr) ------------------------------------------------------------------------- 1. 들어가기 전에.. ----------------- % 이 문서는 Postgres에 있는 영문 Install 문서를 바탕으로 제작되었습니다. % 보다 자세한 사항은 postgres홈페이지를 방문하시거나, 프로그램 소스의 % doc디렉토리를 참조하시기 바랍니다. % 프로그램을 설치하거나 실행할때 중요한건 프로그램을 만든 제작자가 프로그램에 함께 넣어준 문서 즉, README파일을 읽어보는 것입니다. % 이 문서는 PostgreSQL의 기본적인 설치 및 한글사용법, 그리고 먼저 설치해본 필자가 전하고 싶은 팁이 주된 내용으로 구성되어 있습니다. % 그러므로, 이 문서 보다 자세한 정보를 알고 싶으시면 함께 포함되어 있는 REAME 종류의 파일을 함께 읽어 볼것을 적극 권합니다. % 이 문서는 편의상 경어를 생략했습니다. 이점 양해바랍니다. 1.1 필자 설치 Hardware 정보 (아래는 필자의 경우이고, postgres는 리눅스가 설치되는 386이상의 컴퓨터이면 설치가능하다.) Computer : SAMSUNG Magic Station M6000 CPU : Intel Pentium II 300 Mhz (512KB Internal Cache) RAM : SAMSUNG SDRAM 64MB VIDEO : ATI 3D Rage Pro (Korean) - AGP 4MB SOUND : ESS ES1689 AudioDrive at 0x220 irq 5 dma 1,5 MOUSE : SEJIN PS/2 type FDD : SAMSUNG 3.5" 1.44MB HDD : FUJITSU MPC3043AT, 4125MB, CHS=525/255/63, UDMA :... WINDOWS 98 SAMSUNG WN310820A (1.08GB), 1030MB, CHS=523/64/63, DMA :... LINUX CDROM : SAMSUNG CD-ROM SCR-3232 VM103, ATAPI 32X CDROM drive NETWORK : 3COM 3c900b TPO , IRQ 3 MODEM : SAMSUNG LTV90 (56Kbps) MONITOR : SAMSUNG 17" Magic Monitor, CKG7507L(D), :... Syncmaster 700M(s) 1.2 필자 설치 Software 정보 OS : ALzzA RedHat Linux 5.2 (Kernel 2.0.36) XFree86 : XFree86-3.3.2.3-25kr Netscape : Netscape-4.0.7-3kr glibc : glibc-2.0.7-29 Webserver : Apache-1.3.3-3kr PHP : PHP3-3.0.5-3 flex : flex-2.5.4a-4 Database : PostgreSQL-6.4.2 ; 참고로 필자는 Apache + PHP + PostgreSQL 연동해서 작업한다. ; 알짜 레드햇 5.2 사용자라면 Apache와 PHP 그리고 PostgreSQL 이 기본으로 설치되어있다. ; 특히 PHP는 PostgreSQL와 mySQL을 연동가능하게끔 Aphache 서버에 모듈화 되어있다. ; 그러므로 PostgreSQL이나 mySQL을 이용하여 데이터베이스를 구축 하려는 이용자는 Apache나 PHP를 다시 설치할 필요가 없이 그대로 사용하면 되고, 데이타베이스(PostgreSQL)만 업그레이드 해준다. 1.3 설치 요구사항 소스설치 : 30MB 이상 :... /usr/src/pgsql 설치하기 : 20MB 이상 (사용자의 데이타베이스 제외) :... /usr/local 1.4 기존 패키지 삭제 (RedHat 기준) X 사용자 : 제어판에서 기존 postgres를 삭제하자. 일반사용자 : rpm -e postgresqlxx (설치된 패키지 이름) 1.5 쉘모양 설명 # : root로 로긴했을 경우 (본쉘) $ : postgres로 로긴했을 경우 (본쉘) 2. 설치 시작 ------------ 2.1 PostgreSQL 최신버전 가져오기 홈페이지 : http://www.postgresql.org FTP : ftp://ftp.postgresql.org/pub/INSTALL 현재까지(1999/01/10) 최신버전 : 6.4.2 2.2 Postgres 수퍼유저 계정 발급 (이미 있으면 건너뜀) ; root로 로긴하여 groupadd command를 이용 "postgres" 그룹 생성. 참고 : groupadd [g gid [-o]] [-r] [-f] group # addgroup -g 233 postgres ; root 유저상태에서 useradd command를 이용 "postgres" 유저를 생성한다. 참고 : useradd [-u uid [-o]] [-g group] [-G group,...] [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire mm/dd/yy] [-p passwd] [-n] [-r] name # useradd -u 200 -g postgres postgres 2.3 Postgres 수퍼유저로 로긴하자. 앞으로 대부분의 작업은 이 계정을 사용한다. # su - postgres 2.4 flex 버전을 확인하자. $ flex --version ; 만약 버전이 2.5.2 혹은 2.5.4 이상이면 OK ; 만약 버전이 2.5.3 이나 2.5.2 이하이면 업그레이드 필수! ; flex는 다음 사이트에 가면 있다. ==> 사이트 : ftp://prep.ai.mit.edu/pub/gnu ; flex 설치 # tar xvzf flex-2.5.4.tar.gz # cd flex-2.5.4 # make # make check # make install (루트권한으로..) 2.5 기존 postgres를 업그레이드 하는 경우 (새로 설치하는 경우는 2.8절로 이동) ; 기존 데이타를 백업한다. $ pg_dumpall -z > db.out ; 최신 버전의 pg_dumpall 을 이용하려면.. ( \는 다음줄과 연결되었다는 표시, \표시는 입력하지 말것) $ gunzip -c postgresql-v6.4.2.tar.gz \ | tar xvf -src/bin/pg_dumpall <= 한줄에 입력 $ chmod a+x src/bin/pg_dump/pg_dumpall $ src/bin/pg_dump/pg_dumpall -z > db.out $ rm -rf src ; db.out 파일을 확인해 보자. $ ls -l db.out 2.6 업그레이드를 하려면 기존의 postmaster를 중지시킨다. $ ps -ax | grep postmaster $ kill pid (위에서 확인된 번호) 2.7 기존의 디렉토리를 백업한다. # cd /usr/src # mv pgsql pgsql_6_0 # cd /usr/local # mv pgsql pgsql_6_0 2.8 설치할 디렉토리를 만든다. # cd /usr/src # mkdir pgsql # chown postgres.postgres pgsql # cd /usr/local # mkdir pgsql # chown postgres.postgres pgsql 2.9 소스파일의 압축을 푼다. (앞으로의 과정은 설치를 편하게 하기 위해서 root로 설치한후 postgres 로 권한을 주는 방법으로 하겠다.) # cd /usr/src/pgsql # tar xzvf (소스가 있는 디렉토리)/postgresql-v6.4.2.tar.gz 2.10 소스코드를 시스템에 맞게 설정한다. # cd /usr/src/pgsql/src # ./configure [ options ] ; 필요한 옵션 및 팁 설명 * pentium pro 급에서 최적화 (사실 리눅스커널 및 대다수의 응용프로그램은 대부분 386급을 기준로 패키징작업을 한다. postgresa도 예외는 아니어서 기본설치는 386급에 최적화 되어있다. pentium급 이상이라면 아래와 같이 해주면된다. - 사실 386으로 최적화되나 그이상으로되나 성능차이는 별로 없다.) # cd /usr/src/pgsql/src # vi Makefile.custom CFLAG+= -m486 <== 이 한줄을 작성하고 저장한다. 그러면 pentitum pro 급 이상에서 최적화가 된다. ** 한글 사용 (멀티바이트 문자 사용) ; 테이블 및 필드에 한글을 사용하려면 configure에 옵션을 준다. 옵션 : --with-mb=EUC_KR 참고: 필자의 configure 설정 # cd /usr/src/pgsql/src # vi Makefile.custom CFLAG+= -m486 # ./configure --with-mb=EUC_KR 2.11 맨 페이지 및 HTML 문서화일 설치 # cd /usr/src/pgsql/doc # make install 2.12 프로그램 컴파일 # cd /usr/src/pgsql/src # make all ; 만약 컴파일이 실패했다면 # make clean 을 한후 다시 옵션등을 조정해서 컴파일 하면 된다. ; 컴파일이 제대로 되었으면 다음과 같은 메세지가 보인다. 'All of PostgreSQL is successfully made. Ready to install' 2.13 프로그램 설치 ; 설치는 postgres 계정으로 한다. $ cd /usr/src/pgsql/src $ make install ; 만약 postgres 계정으로 설치가 잘 안될때, root로 설치를 하고 pgsql디렉토리의 권한만 변경해주면 문제없이 사용할 수 있다. # chown -R postgres.postgres /usr/local/pgsql 2.14 시스템이 공유라이브러리가 필요할때, 잘 찾을수 있도록 아래와 같이 수정해 준다. a. 리눅스의 경우 우선 root로 로긴해서.. /etc/ld.so.conf 파일에 다음 한줄을 추가하자. /usr/local/pgsql/lib 그리고 나서 /sbin/ldconfig 를 실행한다. ; 리눅스 시스템이라면 a 를 실행하면 되고, 다른 unix시스템이라면 a 말고 b나 c를 실행할 필요가 있을지 모른다. b. 본쉘(bash) 이라면, 아래와 같이 실행하자. export LD_LIBRARY_PATH=/usr/local/pgsql/lib c. C쉘(csh) 이라면, 아래와 같이 실행하자. setenv LD_LIBRART_PATH /usr/local/pgsql/lib ; 데이타베이스를 생성할때, 아래와 같은 메세지가 나오면 위 과정이 필요하다. pd_id: can't load library 'libpq.so' 그리고 다시 데이타베이스를 생성한다. 2.15 환경변수를 설정한다. a. 사용자의 로그인 환경변수에 다음줄을 추가한다. (bash 사용경우) ~/.bash_profile PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANPATH:/usr/local/pgsql/man PGLIB=/usr/local/pgsql/lib PGDATA=/usr/local/pgsql/data export PATH MANPATH PGLIB PGDATA b. 환경변수를 설정하고난후 다음과 같이 실행하면 된다. $ source ~/.bash_profile % 환경변수 설정 팁 ; 위의 경우는 개별적으로 사용자에게 사용할 수 있게 해주는 것이고, 모든 사용자에게 사용할 수 있게 하려면 아래와 같이 하는 방법도 있다. ; 레드햇의 경우, /etc/profile.d 에 postgres환경변수를 만든다. 예로 postgres-environment.sh (bash 의 경우)파일로 만든다. 파일 이름은 상관 없으나 bash의 경우는 꼭 .sh로 끝나야하고 csh이나 tcsh 사용자는 꼭 .csh 파일에 setenv를 사용하여 아래와 같은 내용의 환경변수를 설정할 수 있다. 예) /etc/profile.d/postgres-environment.sh PATH=$PATH:/usr/local/pgsql/bin MANPATH=$MANPATH:/usr/local/pgsql/man PGLIB=/usr/local/pgsql/lib PGDATA=/usr/local/pgsql/data export PATH MANPATH PGLIB PGDATA ; .sh 나 .csh 파일을 만들고 실행가능하게 해주는걸 잊지말자. (물론 root로..) # chmod 755 /etc/profile.d/postgres-environment.sh ; /etc/profile.d/ 디렉토리가 없는 경우는, /etc/profile (bash)나 /etc/csh.cshrc (csh/tcsh) 파일에 위의 명령을 추가시켜준다. 2.16 데이타 베이스를 초기화한다 (반드시 postgres로 로긴) (앞으로의 모든 작업은 postgres로 한다. 절대 root로 사용하지 마라, 그 경우에는 보안에 큰 허점을 노출하게 된다.) $ initdb % 멀티바이트 인코딩 팁!! ; initdb command는 postgresql의 기본 인코딩으로 초기화된다. 예를 들어, $ initdb -e EUC_KR 이렇게 하면 한글로 인코딩 할 수 있다. (EUC_JP 하면 일본어로, EUC_CN 하면 중국어로.. 자세한 내용은 doc/README.mb 파일을 참조) 2.17 데이타베이스에 접근할 권한을 수정한다. ; 이 작업은 /etc/local/pgsql/data/pg_hba.conf 파일을 수정한다. 수정후 반드시 읽기 전용모드로 만들어 둔다. (원격접속을 지원할때 중요하다. 로컬에서만 사용할 경우는 그냥 나둬도 상관없다.) 2.18 command line에서 간단하게 테스트 해보자. a. postmaster 대문을 띄운다. $ postmaster -i & ; 6.4 이전버전에서는 postmaster만 띄우면 되었는데, tcp를 지원 하려면, 즉 다른컴퓨터에서 네트워크로 데이타베이스를 접근할때 반드시 postmaster -i 로 한다. (이 경우 pg_hba.conf 파일을 적절히 수정해 주어야 한다.) ; 로컬에서만 사용할 거라면 postmaster만 실행하면 된다. b. 데이타베이스를 만든다. $ createdb c. 새 데이타베이스에 접속한다. $ psql d. 그리고, 샘플 쿼리를 실행해 본다. postgres=> SELECT datetime 'now'; e. psql을 빠져나온다. postgres=> \q f. 테스트 데이타베이스를 지운다. $ destroydb 2.19 Postgres 수퍼유저 계정 (앞에서 postgres로 만듦)으로 postmaster를 실행한다. 절대 root 계정으로 실행하지 않는다. 부팅할때마다 자동으로 띄우려면 아래와 같이 수정해 준다. ; 아래 작업은 물론 root로 한다. a. 보통의 linux를 포함한 unix 시스템에는 /etc/rc.d 디렉토리 밑에 부팅할때 실행되는 여러가지 스크립트가 있다. 그 중 rc.local 정도의 파일에 다음과 같이 적어준다. 물론 root로. (\는 다음줄과 연결되었다는 표시, \표시는 입력하지 말것) # PostgreSQL database Server starting <== 주석문 echo "PostgreSQL Starting..." su postgres -c "/usr/local/pgsql/bin/postmaster -S -D \ /usr/local/pgsql/data" <== 한줄에 입력 b. 레드햇 리눅스라면 다음과 같이 할 수도 있다. ; /etc/inittab 파일에 다음 한줄을 추가한다. (한줄에 입력도록 한다.) pg:2345:respawn:/bin/su - postgres -c "/usr/local/pgsql/bin/postmaster -D/usr/local/pgsql/data >> /usr/local/pgsql/server.log 2>&1 ; 여기에서 foo 데이타 베이스를 만들어 보자 template1=> create database foo; CREATEDB ; 데이타베이스에 연결 template1=> \c foo connecting to new database: foo ("slash" command는 SQL 문법이 아니어서 세미콜론(;)이 필요없다.) foo=> create table bar (i int4, c char(16)); CREATE ; 그런다음 새로운 테이블을 점검해본다. foo=> \d bar Table = bar +---------------+----------+---------+ | Field | Type | Length | +---------------+----------+---------+ | i | int4 | 4 | | c | (bp)char | 16 | +---------------+----------+---------+ ; 일반적으로 데이타베이스를 만들때는 createdb 를 사용하고, 삭제할때는 destroydb 를 사용하며, DB 사용자를 추가할때는 createuser를 사용하고, 삭제할때는 destroyuser를 사용한다) ; foo 데이타 베이스를 만든다면 $ createdb foo ; foo 데이타 베이스를 작업하려면.. $ psql foo ; foo 데이타 베이스를 삭제하려면 (한번 삭제된 자료는 복구가 불가능하다.) $ destroydb foo ; gildong 이란 DB사용자를 추가하려면.. (처음에는 postgres(수퍼유저)만 DB를 사용할 수 있다. 그래서, 일반 이용자가 DB를 사용하려면, 등록을 한다.) $ createuser gildong ; gildong 이란 DB사용자를 삭제하려면.. (이건 리눅스 자체 계정을 삭제하는게 아니고 postgres를 사용할 수 없게 만드는 것이다.) $ destroyuser gildong 4. 추가적으로 할 일 ------------------- ; 질문이나 버그 혹은 피드백이 있으면, 우선 /usr/src/pgsql/doc/ 의 문서를 읽어보라. FAQ는 큰 도움이 될것이다. (한글번역은 KLDP를 참조) ; 또한, http://www.postgresql.org 를 자주 방문하여 최신의 정보를 얻자. ; 이 문서는 postgres의 사용법을 다룬 문서가 아니므로, 사용법은 HOW-TO 문서등을 참조 바란다. 5. 마치면서 ----------- ; 이상으로 모든 설치가 끝났습니다. ; PostgreSQL과 함께 즐거운 리눅싱이 되길... ; 질문있으시면, 뉴스그룹에 포스팅하시거나, 각 동호회등에 질문하시면 실력있는 많은 분들이 도와주실 겁니다.