AIX 6.1에서 PostgreSQL V8.4.19를 컴파일하는 중에 아래와 같은 에러가 발생하였다.

 

gmake[3]: Leaving directory `/usr/local/postgresql-8.4.19/src/backend/utils/mb/conversion_procs/utf8_and_uhc'
gmake[3]: Entering directory `/usr/local/postgresql-8.4.19/src/backend/utils/mb/conversion_procs/utf8_and_euc_jis_2004'
gmake[3]: *** No rule to make target `utf8_and_euc_jis_2004.o', needed by `utf8_and_euc_jis_2004.so'.  Stop.
gmake[3]: Leaving directory `/usr/local/postgresql-8.4.19/src/backend/utils/mb/conversion_procs/utf8_and_euc_jis_2004'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/usr/local/postgresql-8.4.19/src/backend/utils/mb/conversion_procs'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/usr/local/postgresql-8.4.19/src'
gmake: *** [all] Error 2

 

원인은 엉뚱한 곳에 있었으니 AIX의 기본 tar 명령어가 "GNU long-filename extensions to the tar format" 을 알지 못하여 아래 파일이 풀리지 않았다.

 

# cat @LongLink
postgresql-8.4.19/src/backend/utils/mb/conversion_procs/utf8_and_shift_jis_2004/utf8_and_shift_jis_2004.c


AIX에 rpm 형태로 제공하는 'A GNU file archiving program'를 다음 링크에서 다운로드 받아 설치하였다(로그인 필요).

http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html

 

AIX에서 rpm 설치는 다음 링크를 참고한다.

http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/altlic.html

 

아래 경로의 tar 명령어를 이용하여 패키지를 푼 후 정상 컴파일이 됨을 확인하였다.

# /opt/freeware/bin/tar xvfz postgresql-8.4.19.tar.gz

 

참고: http://postgresql.1045698.n5.nabble.com/BUG-7771-packaging-error-causes-build-failure-td5737793.html

Posted by dcmru
,
UNIX/Linux 환경에서 PostgreSQL V8.3.1을 설치중 아래와 같은 메시지가 발생하면서, 설치가 되지 않는 경우가 있었다.

The program "postgres" is needed by initdb but was not found in the
same directory as "/usr/local/pgsql/bin/initdb".
Check your installation

The program "postgres" is needed by pg_ctl but was not found in the
same directory as "/usr/local/pgsql/bin/pg_ctl".
Check your installation

타 시스템과 비교중 /dev/null의 퍼미션이 변경되어 있었다.

initdb 또는 pg_ctl을 root 유저가 아닌 일반유저로 실행시 /dev/null에 쓰기 권한이 없으면, 위와 같은 메시지가 표시되었다.

그래서 /dev/null 의 퍼미션을 아래 명령어와 같이 rw-rw-rw로 변경하여 해당 문제를 해결할 수 있었다.

# chmod 666 /dev/null

퍼미션을 변경하기 전에 /dev/null의 퍼미션을 숙지하여, 발생할 수 있는 오류를 미연에 방지하는 것은 센스~

Posted by dcmru
,

PostgreSQL을 Windows 2008 R2에서 설치 시에 Initialise database cluster 설정 창에서 Next 버튼 클릭 시 아래와 같은 메세지가 나타나면서 설치가 진행되지 않았다.



에러 내용을 보면, 데이터베이스를 초기화하는데 Secondary Logon service가 필요하다는 내용이다.

이 때에는 윈도우 서비스 관리자를 열어 Secondary Logon service를 시작 시켜주고, 설치를 진행하면 된다.



다른 버전의 윈도우는 자동 시작으로 설정이 되어 있었는데, Windows 2008 R2는 시작유형이 수동으로 되어 있었다.

설치 시에만 필요하므로 시작 유형을 자동으로 설정하지 않아도 된다.

윈도우 재시작을 해보니 PostgreSQL 구동이 이상없이 잘되는 것을 확인하였다.


Posted by dcmru
,

개요
 업무적으로 여러 OS에서 PostgreSQL을 컴파일하여 사용하게 되면서, 정리의 필요성을 느껴 몇자 적어보려고 한다. 내용은 OS(AIX, HP-UX, Linux, Solaris, Unixware) 및 플랫폼(x86, x86_64, ia64, ppc, parisc, sparc)에 따른 PostgreSQL 설치 시 발생한 에러와 그에 대한 해결 및 configure와 make 등 옵션을 중점으로 기술한다. 소스 tar 를 풀기 전에 필요한 라이브러리(libreadline, libz 등)는 소스를 따로 받아 설치해둔다. 대부분의 소스는 configure, make, make install로 컴파일하여 설치하면 된다. OS별로 오픈소스 패키지들을 제공하는 사이트도 있으므로 OS별 에러부분의 글을 보고 설치하여도 된다. 의존성이 있는 라이브러리는 정적라이브러리를 사용하여 바이너리 안에 포함하도록 하였다. OS에 기본적으로 설치되어 있는 의존성 라이브러리는 find 로 찾아 컴파일 시 참조하지 않도록 하기위해 이름을 변경하거나 임시 디렉토리에 백업을 해둔 후 컴파일을 하였다. configure 시 기본포트를 변경하기 위해 --with-pgport=5432를 예로 기술하였으나 기술하지 않을 시 기본 포트인 5432가 사용된다. --enable-thread-safety 옵션 또한 주어야하는데, 이름에서 유추할 수 있듯이 PostgreSQL은 Muti-Thread 기반이 아닌 Prefork 방식으로서 각종 Client등에서 Muti-Thread 동작 접근 시의 안전성을 위한 것으로 각종 Cluster나 Pooler들은 Muti-Thread로 접근되어 추가를 요구한다. PostgreSQL 소스 컴파일 시 미리 PostgreSQL 을 구동하기 위한 계정과 그룹을 생성하여 소스는 /usr/local/pgsql_src 과 같이 디렉토리를 만들어 chown -R 옵션을 사용하여 하위디렉토리까지 소유자 및 소유 그룹을 PostgreSQL 계정으로 변경해둔다. tar 풀기, configure, make, make install 시 root가 아닌 PostgreSQL 전용 계정으로 su 하여 실행한다. root로는 make 자체가 실행되지 않는다. 이외에 각OS 벤더의 컴파일러를 사용하여 컴파일을 하면 컴파일이 되지만 바이너리가 구동이 되지 않는 현상이 있었다. 이때는 gcc를 설치하여 해결하였다. 그리고 make는 gmake를 사용하여야 한다.

1.
 PostgreSQL 수동
설치

1.1.  PostgreSQL 다운

먼저  http://www.postgresql.org/ftp/source/에서 최신버전의 PostgreSQL 을 적당한 장소에 다운받는다.

1.2.  기초 환경 설정
  ▪ 
postgres 그룹과 사용자를 생성한 후 비밀번호를 세팅한다. 그룹과 사용자 이름은 보안을 위해 dba와 postgres를 사용하지 않아도 된다.
    # groupadd dba
    # adduser -d /database/postgres -g dba -c "PostgreSQL Master User" -m -s /bin/bash postgres
    # passwd postgres

 
/usr/local/src/pgsql /usr/local/pgsql 디렉토리를 생성한 후 퍼미션을 바꾼다.
    # mkdir /usr/local/src/pgsql
    # chown postgres.dba /usr/local/src/pgsql
    # mkdir /usr/local/pgsql
    # chown postgres.dba /usr/local/pgsql

 
postgres 사용자로 “–“ 옵션을 주어 su 하거나 postgres 사용자로 로그인 한다.
    # su - postgres

  ▪
postgres 사용자로 다운받은 소스파일을 /usr/local/src/pgsql 디렉토리로 이동시킨 후 압축을 해제한다.
    $ mv postgresql-8.2.6.tar.gz /usr/local/src/pgsql
    $ cd /usr/local/src/pgsql
    $ tar xvfz postgresql-8.2.6.tar.gz

1.3.  PostgreSQL 설치

 
postgres 사용자로 압축을 푼 디렉토리로 이동한다.
    $ cd /usr/local/pgsql/postgresql-8.2.6

  ▪ 소스 컴파일을 위해 적당한 옵션을 주어 configure 를 실행한다. 옵션 설명은 --help 옵션을 사용하면 볼 수 있다.
    $ ./configure --prefix=/usr/local/pgsql \
                        --enable-thread-safety \
                        --enable-depend \
                        --enable-nls=ko \
                        --with-openssl \
                        --with-python \
                        --with-perl

    옵션은 다음과 같다
.

      
--prefix : 기본적으로 대부분의 소스가 ./configure make;make install을 하면 /usr/local 이나 특정위치로 설치된다. 그렇게 되면 추가 파티션 이동이나 프로그램 파일 백업 등에 에러사항이 발생한다. 이경우 유지보수,관리를 위해 prefix 를 이용해서 특정위치로 설치되게 지정해준다. PostgreSQL MakfeFile 에서는 uninstall 을 지원한다
     
--enable-integer-datetimes enable 64-bit integer date/time support : 64Bit 숫자,날짜,시간지원여부로 일반적으로는 필요하지 않다.
      --enable-nls[=LANGUAGES] : 시스템의 각종 출력 메세지에 대한 나라별 언어 지원으로 8.0 부터는 DSN PostgreSQL 에서도 한글 메세지와 에러로그를 볼 수 있다. 이 옵션은 복수 선택이 가능하며, 디폴트로 추후 선택하거나 상황에 따라 Database 별로 설정 가능하다.
        
지원 되는 NLS 종류 : http://developer.postgresql.org/~petere/nlsstatus/#t8.0-branch 
         
다중선택시 --enable-nls='ko de' 같이 설정합니다.
     
--disable-shared : PostgreSQL 컴파일 시 공유라이브러리와 함께 컴파일하지 않겠다는 부분으로 하지않으면 성능은 좀 향상될수 있으나 상황에 따라 에러가 발생하는 시스템이 많을 것으로 기본적으로 사용하지 않기를 권장한다.
      --enable-depend : 소스컴파일 시 의존성이 있는 파일이나 라이브러리에 대한 체크를 하는것으로 포함하지 않으면, 컴파일 속도는 다소 빨라지지만 현재의 주류 시스템에서는 체크를 해서 안전사용하는것도 좋은 예이다
    
--enable-thread-safety : PostgreSQL Muti-Thread 기반이 아니며, Prefork 방식으로서 각종 Client 등에서 Muti-Thread 동작 접근 시의 안전성을 위한것으로 각종 Cluster Pooler 들은 Muti-Thread 로 접근되어 추가를 요구하니 추가해준다. V8.0 부터는 디폴트값이다.
      --enable-thread-safety-force : --enable-thread-safety 를 추가 하였는데 Thread Safe Test 에서 에러가 발생하였지만 에러는 그냥 무시하고 컴파일 할 때 필요한것으로 에러가 발생하면 에러원인을 찾아 주는것니 오동작을 막을 수 있다.
     
--with-docdir=DIR
     
--without-docdir : Man Page 의 설치 관련 옵션으로 기본적으로 옵션을 주지 않으면 설치위치의 doc 디렉토리에 설치되지만 --without-docdir Man Page 설치를 하지 않거나 --with-docdir 를 사용하여 특정위치로 설치가 가능하다.
     
--with-pgport=PORTNUM : PostgreSQL의 기본 Service Port 5432 이나 만약에 외부에서 접근이 이루어지거나 하는 경우에는 변경을 해주는것이 좋다. 따로 설정파일에서도 변경이 가능하다.
     
--with-tcl
     
--with-tclconfig=DIR : Procedure Language TCL 을 사용 시 옵션추가, 따로 설치 위치는 주지 못하며, 자동 검색을 한다. 원할경우 소스수정이 이루어져야한다.
     
--with-perl : Procedure Language Perl 을 사용 시 옵션추가, 따로 설치 위치는 주지 못하며, 자동 검색을 한다. 원할경우 소스수정이 이루어져야한다.
     
--with-python : Procedure Language Python 를 사용 시 옵션추가, 따로 설치 위치는 주지 못하며, 자동 검색을 한다. 원할경우 소스수정이 이루어져야한다.
     
--with-krb4
     
--with-krb5 : Kerberos 를 통한 접속 인증 시스템 사용을 원할 때에 추가(버전에 따라 추가) 한다.
     
--with-pam : PAM(Pluggable Authentication Modules) 사용을 원할 때 추가한다.
     
--with-rendezvous : Apple Rendezvous 인증처리를 원할 때 추가한다.
     
--with-openssl : SSL 인증처리를 원할 때 추가한다.
     
--without-readline : Command History 기능을 사용하지 않을때 추가한다.
     
--without-zlib : Zlip 사용을 하지 않을 시 추가 (내부에서 압축관련 알고리즘이 필요) 한다.
     
--with-includes=DIRS : --with-openssl, --with-python 등 자동검색하는 항목이 있는데 이의경우 prefix 등으로 따로 설치하였거나 특정위치의 C Header 파일을 참조하게 하고 싶을 때 추가한다. ) --with-includes=/usr/local/ssl/include:/usr/local/python/include
     
--with-libraries=DIRS : --with-includes와 같이 Library 위치를 지정하고 싶을 때 사용한다. --with-includes, --with-libraries 로 설정하면 configure 단계에서 우선적으로 참조한다. ) --with-libraries=/usr/local/ssl/lib:/usr/local/python/lib 

  ▪
configure 가 에러없이 종료된 후 make 를 사용하여 설치한다.
    $ make; make check; make install

  ▪ 만약
root 사용자로 컴파일하여 설치하였다면, 아래 명령을 실행한다.
    # chown -R postgres:dba /usr/local/pgsql
    # cd /usr/local/pgsql
    # chown -R root lib include

1.4.  PostgreSQL 환경설정(Linux 기준)

 
root 사용자로 PostgreSQL 라이브러리의 컴파일 환경을 구성한다.
    # vi /etc/ld.so.conf
      ▫ 아래 내용을 추가한다.

/usr/local/pgsql/lib

    # ldconfig


  ▪ 또는
PostgreSQL 라이브러리를 사용한 응용프로그램의 컴파일 시점에 /usr/local/pgsql/lib LD_LIBRARY_PATH, LD_LIBPATH 등에 추가하여 사용하면 된다.
  
  ▪ root 사용자로 데이터베이스 파일이 저장될 디렉토리를 만든 후 postgres 의 소유로 바꾼다. 데이터베이스가 저장될 곳은 저장공간이 넉넉한 다른 경로에 만들어도 된다. 따로 만들지 않아도 아래에서 실행할 initdb에 -D 옵션으로 /usr/local/pgsql 경로를 주면 data 디렉토리가 만들어진다. 또는 링크로 다른 경로를 바꿔줄 수도 있고, postgresql.conf에서 다른 경로로 지정할 수도 있다.
    # /usr/local/pgsql/data
    # chown postgres.dba /usr/local/pgsql/data

 
postgres 사용자의 환경변수를 설정한다. bash, ksh, sh 쉘 사용자를 기준으로 설명한다
    # vi /home/postgres/.bash_profile
      ▫ 아래 내용을 추가한다.

PATH=$PATH:/usr/local/pgsql/bin

MANPATH=/usr/local/pgsql/man

PGLIB=/usr/local/pgsql/lib

PGDATA=/usr/local/pgsql/data

export PATH MANPATH PGLIB PGDATA

 
 
csh 쉘 사용자는 다음과 같이 환경변수를 설정한다.
    # vi /home/postgres/.cshrc
      ▫ 아래 내용을 추가한다.

setenv PATH $PATH:/usr/local/pgsql/bin

setenv MANPATH /usr/local/pgsql/man

setenv PGLIB /usr/local/pgsql/lib

setenv PGDATA /usr/local/pgsql/data

 
 
PostgreSQL 구동스크립트를 만들어 준 후 런레벨에 맞게 링크를 만들어준다. 순서는 OS 환경에 맞춰 설정한다.
    # vi /etc/rc.d/init.d/postgresql
      ▫ 아래 내용을 추가한다.

#!/bin/sh

 

# Script to start and stop PostgreSQL

 

SERVER=/usr/local/pgsql/bin/postmaster

PGCTL=/usr/local/pgsql/bin/pg_ctl

PGDATA=/usr/local/pgsql/data

OPTIONS=-i

LOGFILE=/usr/local/pgsql/data/postmaster.log

 

case "$1" in

        start)

                echo -n "Starting PostgreSQL..."

                su -l postgres -c "nohup $SERVER $OPTIONS -D $PGDATA >$LOGFILE 2>&1 &"

                ;;

        stop)

                echo -n "Stopping PostgreSQL..."

                su -l postgres -c "$PGCTL -D $PGDATA stop"

                ;;

        restart)

                echo -n "Stopping PostgreSQL..."

                su -l postgres -c "$PGCTL -D $PGDATA stop"

                echo -n "Starting PostgreSQL..."

                su -l postgres -c "nohup $SERVER $OPTIONS -D $PGDATA >$LOGFILE 2>&1 &"

                ;;

        *)

                echo "Usage : $0 {start|stop|restart}"

                exit 1

                ;;

esac

 

exit 0


      ▫ 리눅스를 기준으로 구동환경을 설정하는 방법은 다음과 같다
.
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc0.d/K25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc1.d/K25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc2.d/K25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc3.d/K25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc3.d/S25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc5.d/K25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc5.d/S25postgresql
        # ln –s /etc/rc.d/init.d/postgresql /etc/rc.d/rc6.d/K25postgresql

1.5.  PostgreSQL 구동

 
postgres 사용자로 로그인하여 initdb 명령어를 사용하여 데이터베이스 초기화를 한다. 인코딩을 지정해주려면 “--encoding=utf-8” 또는 “--encoding=euc-kr” 같은 옵션이 필요하고, 로케일을 지정하기 위해서는 “--locale=ko_kr” 또는 “--no-locale” 옵션 등이 필요하다.
    # initdb -E unicode --locale=ko_KR.UTF8 --lc-messages=C -A md5 -W –D /usr/local/pgsql
      ▫ 옵션 설명
        based on unicode (UTF8)
        locale: Korean unicode
        display message: english
        password encryption


      initdb
는 파일명에서도 알 수 있듯이 DB초기화 작업용 파일로 옵션은 다음과 같다.

-D : PostgreSQL 디비 생성 폴더위치로 현재 Shell에서 PGDATA로 설정한곳으로 자동으로 읽어오나 따로 설정하거나 추가적인 클러스터(디비환경)를 만들고 싶을때 지정하면 된다.

-E : PostgreSQL의 기본적인 입출력(소팅포함)관련 기본 Encoding Set을 정하는 것으로 한국의 경우는 EUC_KR로 설정할수가 있지만 EUC_KR시에는 아햏해,쑣 등은 입력이 불가능하게 되며, 메세지로 EUC_KR에서 지원되지 않는 문자셋이라고 뜨게 된다. 이런것을 미연에 방지하려면 UTF-8로 설정을 해야한다.

-A : 기본적인 인증 처리부분은 pg_hda.conf 설정 부분을 참고한다. trust (No Password),password(text) 등이다.

-U : 현재의 postgres계정이 아닌 다른 계정을 마스터 계정으로 쓸 때 사용한다.

-W : PostgreSQL은 기본적으로 마스터 계정에 대한 패스워드가 없다. 이옵션을 넣어 패스워드를 초기 설정가능하다.

--locale

--lc-collate : String sort order

--lc-ctype : Character classification (What is a letter? Its upper-case equivalent?)

--lc-messages : Language of messages

--lc-monetary : Formatting of currency amounts

--lc-numeric : Formatting of numbers

--lc-time=LOCALE : Formatting of dates and times

지역화 설정으로 기본적으로 System OS의 설정값으로 가져온다. 메세지나, 통화(), 숫자표현이나 날짜, 시간 등 각나라별(화폐표시 한국은 \ 3,000 , 미국은 $ 3,000 같은 형태) 성정을 말한다. 대부분 System OS설정기준을 기준으로 한다.


       주의
:
여기서 주의 해야 하는것은 한글 환경으로 셋팅이된 OS의 경우 COLLATE ko_KR.eucKR로 자동으로 잡히게 된다. 이 경우 한글 정렬이나 like연산시 index를 검색하지않고 full scan하는 문제가 있으며, glibc의 한글관련 문제로 아직은 패치가되지 않은 상태로 collate C Type로 잡아 주어야 한다. 현재로써는 위와 같은 방법으로 해야 한글환경에서 정상적인 작동이 가능하다. 최신 버전에는 개선이 되었는지 확인하지 못하였다.

 
▪ 외부에서 접속이 가능하게 하기위해 pg_hba.conf 를 수정한다. PostgreSQL 데몬이 구동중이라면 데몬을 재시작 할 필요는 없다.
    # vi /usr/local/pgsql/data/pg_hba.conf
      ▫ 아래 내용을 추가한다.

host    all         all         192.168.0.0/24        password

 
 
▪ 서버의 IP LISTEN 할 수 있게 IP Port 를 설정한다. listen_address='*'로 설정하면, 서버의 IP가 여러개일 때 모든 IP로 listen을 한다. PostgreSQL 데몬이 구동중이라면 데몬을 재시작해야한다. 기본 포트번호는 5432 이다.
    # vi /usr/local/pgsql/data/postgresql.conf
      ▫ 아래 내용을 변경한다.

listen_addresses = '192.168.0.97'

port = 5432


    
# /etc/rc.d/init.d/postgresql restart


  ▪
PostgreSQL 데몬이 구동중이지 않다면 데몬을 구동시킨다.
    # /etc/rc.d/init.d/postgresql start

 
 
▪ 데몬 확인
    # ps x

PID TTY STAT TIME COMMAND

20667 pts/2 S 0:00 -bash

27928 pts/2 S 0:00 /usr/local/pgsql/bin/postmaster

27930 pts/2 S 0:00 postgres: writer process

27931 pts/2 S 0:00 postgres: stats buffer process

27932 pts/2 S 0:00 postgres: stats collector process

      PostgreSQL의 감시 데몬 프로세스인 “postmaster” , 몇개의 postgres 프로세스가 기동하고 있는 것이 알 것이다. “stats buffer process””stats collector process” , PostgreSQL 7.2이후로 추가된, 퍼포먼스 정보 수집을 위한 프로세스이고, “writer” 는 지금 버젼으로 추가된 신기능으로, 더티 페이지를 조금씩 디스크에 써내, 디스크 액세스에 의한 지연을 가능한 한 평준화하는 책임을 다한다.

 
1.6.  
데이터베이스와 사용자 생성
 
  ▪
createuser 명령어를 사용하여 사용자를 생성한다. postgres는 임의의 이름이다. 아래와 같이 명령어를 이용할 수도 있고, psql로 DB에 접속하여 SQL문으로도 만들 수 있다.
    $ createuser --pwprompt --encrypted --no-adduser --no-createdb postgres


       옵션은 다음과 같다
.

-a, --adduser : 유저생성권한 부여함

-A, --no-adduser : 유저생성권한 부여않함

-d, --createdb : 디비생성권한 부여함

-D, --no-createdb : 디비생성권한 부여않함

-P, --pwprompt : 신규 패스워드 질문 프롬프트 띄우기

-E, --encrypted : 패스워드 암호화 (디폴트)

-N, --unencrypted : 패스워드 비암호화

-i, --sysid=SYSID : 내부 SysID (자동 부여되므로 불필요)

 

원격에 서버접속이나 상황에 따라쓰는 connection 옵션

-h, --host=HOSTNAME : 서버 HostName또는 IP , local은 불필요

-p, --port=PORT : 서버 Port

-U, --username=USERNAME : 접속 유저명(유저생성권한이 있어야함)

-W, --password : 접속 패스워명

 
 
createdb 명령어를 사용하여 데이터베이스를 생성한다. 마지막 데이터베이스명은 임의의 이름이다. 아래와 같이 명령어를 이용할 수도 있고, psql로 DB에 접속하여 SQL문으로도 만들 수 있다.
    $ createdb --encoding=UNICODE --owner=postgres testdb

 

옵션은 다음과 같다.

-D, --tablespace=TABLESPACE : 실제적인 데이터베이스의 저장 폴더(파티션)를 지정한 TableSpace 명을 지정하는것으로 Default PGDATA 디렉토리가 된다.

-E, --encoding=ENCODING : 데이터베이스의 인코딩으로 inidb 시의 ENCODING 에 대해보면 되고, 기본으로는 initdb 때 사용한 Encoding 을 따른다.

-O, --owner=OWNER : 데이터베이스의 Owner , 이 데이터베이스의 Master User

-T, --template=TEMPLATE : 템플릿 데이터베이스 선택, 즉 데이터베이스 생성 시 기본적으로 복사할 각종 자료를 만들어둔 데이터베이스를 지정하면 된다.

 

원격의 서버접속이나 상황에 따라쓰는 connection 옵션

-h, --host=HOSTNAME : 서버 HostName 또는 IP , local 은 불필요

-p, --port=PORT : 서버 Port

-U, --username=USERNAME : 접속 유저명(유저생성권한이 있어야함)
      
-W, --password : 접속 패스워명



2. Red Hat Linux release 7.2 (Enigma) 
  Redhat 계열 x86 플랫폼에 적용가능하며, x86 플랫폼의 상위버전에서 사용할 수 있다. 하위 버전에서 컴파일하여 상위 버전과 같이 쓰기 위해 Redhat 7.2에서 컴파일을 하였으며, 아래와 같은 에러들이 발생했었으며, 컴파일한 바이너리로 RHEL 5까지 사용가능함을 확인하였다.

configure를 실행하기 전에 LD_LIBRARY_PATH에 /usr/local/lib를 추가한다. export LD_LIBRARY_PATH=/usr/local/lib

libreadline 5.2 소스 컴파일하여 설치.
libz 1.2.3 소스 컴파일하여 설치.
libtermcap.a 는 디폴트로 설치되어 있는것 사용

./configure --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --enable-nls=ko --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

2.1 8.2.6 소스에서는 아래 make 에러 발생

gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -fno-strict-aliasing -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libpq.so.5 -Wl,--version-script=exports.list  fe-auth.o fe-connect.o fe-exec.o fe-misc.o fe-print.o fe-lobj.o fe-protocol2.o fe-protocol3.o pqexpbuffer.o pqsignal.o fe-secure.o md5.o ip.o wchar.o encnames.o noblock.o pgstrcasecmp.o thread.o strlcpy.o  -L../../../src/port -lssl -lcrypto -lcrypt -lpthread -Wl,-rpath,'/usr/local/redpgsql/lib' -o libpq.so.5.0
/usr/bin/ld:exports.list:1: parse error in VERSION script
collect2: ld returned 1 exit status
make[3]: *** [libpq.so.5.0] Error 1
make[3]: Leaving directory `/home/dckim/postgresql-8.2.6/src/interfaces/libpq'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/dckim/postgresql-8.2.6/src/interfaces'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/dckim/postgresql-8.2.6/src'
make: *** [all] Error 2

에러 해결을 위해 /home/dckim/postgresql-8.2.6/src/interfaces/libpq/Makefile 에서 아래와 같이 수정

#ifeq ($(PORTNAME), linux)
#$(shlib): exports.list

#exports.list: exports.txt
#       echo '{ global:' >$@
#       $(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@
#       echo ' local: *; };' >>$@

#exported_symbols_list = -Wl,--version-script=exports.list
#endif

2.2 소스 8.3.1에서도 8.2.6 소스와 같은 아래 에러 발생 

echo '{ global:' >exports.list
gawk '/^[^#]/ {printf "%s;\n",$1}' exports.txt >>exports.list
echo ' local: *; };' >>exports.list
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -fno-strict-aliasing -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libpgtypes.so.3 -Wl,--version-script=exports.list  numeric.o datetime.o common.o dt_common.o timestamp.o interval.o pgstrcasecmp.o   -L../../../../src/port -L/usr/local/lib -lm -Wl,-rpath,'/usr/local/secpgsql/lib' -o libpgtypes.so.3.0
/usr/bin/ld:exports.list:1: parse error in VERSION script
collect2: ld returned 1 exit status
make[4]: *** [libpgtypes.so.3.0] Error 1
make[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/pgtypeslib'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
make: *** [all] Error 2

에러 해결을 위해 /usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/pgtypeslib/Makefile 에서 아래와 같이 수정

#ifeq ($(PORTNAME), linux)
#$(shlib): exports.list

#exports.list: exports.txt
#       echo '{ global:' >$@
#       $(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@
#       echo ' local: *; };' >>$@

#exported_symbols_list = -Wl,--version-script=exports.list
#endif

2.3 소스 8.3.1에서 아래 에러 발생 

echo '{ global:' >exports.list
gawk '/^[^#]/ {printf "%s;\n",$1}' exports.txt >>exports.list
echo ' local: *; };' >>exports.list
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -fno-strict-aliasing -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libecpg.so.6 -Wl,--version-script=exports.list  execute.o typename.o descriptor.o data.o error.o prepare.o memory.o connect.o misc.o path.o pgstrcasecmp.o strlcpy.o thread.o -L../pgtypeslib -L../../../../src/interfaces/libpq -L../../../../src/port -L/usr/local/lib -lpgtypes -lpq -lm -lpthread -Wl,-rpath,'/usr/local/secpgsql/lib' -o libecpg.so.6.0
/usr/bin/ld:exports.list:1: parse error in VERSION script
collect2: ld returned 1 exit status
make[4]: *** [libecpg.so.6.0] Error 1
make[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/ecpglib'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
make: *** [all] Error 2

에러 해결을 위해 /usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/ecpglib/Makefile 에서 수정

#ifeq ($(PORTNAME), linux)
#$(shlib): exports.list

#exports.list: exports.txt
#       echo '{ global:' >$@
#       $(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@
#       echo ' local: *; };' >>$@

#exported_symbols_list = -Wl,--version-script=exports.list
#endif

2.4 소스 8.3.1에서 아래 에러 발생 

echo '{ global:' >exports.list
gawk '/^[^#]/ {printf "%s;\n",$1}' exports.txt >>exports.list
echo ' local: *; };' >>exports.list
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -fno-strict-aliasing -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -fpic -shared -Wl,-soname,libecpg_compat.so.3 -Wl,--version-script=exports.list  informix.o  -L../ecpglib -L../pgtypeslib -L../../../../src/interfaces/libpq -L../../../../src/port -L/usr/local/lib -lecpg -lpgtypes -lpq -lm -lpthread -Wl,-rpath,'/usr/local/secpgsql/lib' -o libecpg_compat.so.3.0
/usr/bin/ld:exports.list:1: parse error in VERSION script
collect2: ld returned 1 exit status
make[4]: *** [libecpg_compat.so.3.0] Error 1
make[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/compatlib'
make[3]: *** [all] Error 2
make[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
make: *** [all] Error 2

에러 해결을 위해 /usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/compatlib/Makefile 에서 수정

#ifeq ($(PORTNAME), linux)
#$(shlib): exports.list

#exports.list: exports.txt
#       echo '{ global:' >$@
#       $(AWK) '/^[^#]/ {printf "%s;\n",$$1}' $< >>$@
#       echo ' local: *; };' >>$@

#exported_symbols_list = -Wl,--version-script=exports.list
#endif


3.  RHAS 4.0  : x86_64

/usr/include 의 readline, zconf.h, zlib.h 백업 후 패키지함. 패키지 후 복원
/usr/lib 의 libreadline.so.4, libreadline.so.4.3, libz.a, libz.so, libz.so.1, libz.so.1.2.1.2 백업 후 패키지 후 복원

libreadline 5.2 소스 설치함.
libz 1.2.3 소스 설치함.
libtermcap.so 는 /lib64/libtermcap.so 사용함.

export LD_LIBRARY_PATH=/usr/local/lib

./configure --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --enable-nls=ko --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


4. RHAS 4.0 : ia64

[root@AS40 pgsql_src]# ls -al /usr/lib/libtermcap.*
-rw-r--r--  1 root root 25804 Jun 16  2004 /usr/lib/libtermcap.a
lrwxrwxrwx  1 root root    29 May  9  2007 /usr/lib/libtermcap.so -> ../../lib/libtermcap.so.2.0.8
[root@AS40 pgsql_src]# ls -al /usr/lib/libreadline*
-rw-r--r--  1 root root 613340 Sep  3  2004 /usr/lib/libreadline.a
lrwxrwxrwx  1 root root     18 May  9  2007 /usr/lib/libreadline.so -> libreadline.so.4.3
lrwxrwxrwx  1 root root     18 May  9  2007 /usr/lib/libreadline.so.4 -> libreadline.so.4.3
-rwxr-xr-x  1 root root 400032 Sep  3  2004 /usr/lib/libreadline.so.4.3
[root@AS40 pgsql_src]# ls -al /usr/lib/libz.*
-rwxr-xr-x  1 root root 158838 Sep 13  2004 /usr/lib/libz.a
lrwxrwxrwx  1 root root     15 May  9  2007 /usr/lib/libz.so -> libz.so.1.2.1.2
lrwxrwxrwx  1 root root     15 May  9  2007 /usr/lib/libz.so.1 -> libz.so.1.2.1.2
-rwxr-xr-x  1 root root 135256 Sep 13  2004 /usr/lib/libz.so.1.2.1.2

/usr/include 의 readline, zconf.h, zlib.h, zutil.h 파일 백업 후 패키지 후 복원
/usr/lib 의 libreadline.so, libreadline.so.4, libreadline.so.4.3, libtermcap.so, libz.a, libz.so, libz.so.1, libz.so.1.2.1.2 파일 백업 후 패키지 후 복원

libreadline 5.2 소스 커파일 설치 : /usr/local/lib 의 libreadline.so  libreadline.so.5  libreadline.so.5.2 백업 후 패키지 후 복원
zlib 1.2.3 소스컴파일 설치 : 정적라이브러리만 설치됨.

./configure --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --enable-nls=ko --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


5. AIX 4.3.3
  AIX의 의존성 패키지는 아래 사이트에서 다운받을 수 있다.
http://www.bullfreeware.com
http://www-03.ibm.com/systems/power/software/aix/linux/index.html


readline 5.2 소스설치
GNU make 설치
bison : 패키지 버전이 낮아 삭제함.
flex
xlc 를 사용하여 컴파일한 바이너리로는 구동이 되지 않아 gcc  3.3 설치하여 컴파일함
PostgreSQL 유저의 디렉토리를 만든후 tar 푼 후 PATH(cc 및 /usr/local/bin 추가)에 root 와 같게 환경설정
zlib 1.1.4 로 새로 설치함. 동적 라이브러리는 패키지시 리네임한 후 패키지함.
readline 5.2 로 소스설치함. 패키지 한 후 삭제함.
libtermcap.a 설치안되어 있고, 패키지 없어서 설치안함.(패키지가 알아서 /usr/lib/libcurses.a 로 사용함.)

export PATH=$PATH:/usr/local/bin:/usr/vac/bin
PATH=/informix/IDS/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb://bin:/usr/bin/X11:/sbin:/usr/vac/bin:.:/usr/local/bin
export LD_LIBRARY_PATH=$LD_LIBRARY:/usr/local/lib

./configure CC=gcc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


6. AIX 5.1

export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java130/jre/bin:/usr/java130/bin:/usr/vac/bin:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

xlc 사용
GNU make
flex
bison : 패키지 버전이 낮아 삭제함.
readline 5.2 소스컴파일 설치(정적라이브러리 사용)
zlib 1.2.3 소스컴파일 설치 후 패키지 후 삭제함.

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


7. AIX 5.2

gcc 사용(설치되어 있었음)
gettext-0.10.40-8.aix5.2.ppc.rpm
bison-1.875-3.aix5.1.ppc.rpm
gzip-1.2.4a-10.aix5.2.ppc.rpm
flex-2.5.4a-6.aix4.3.ppc.rpm
zlib-1.2.3-4.aix5.2.ppc.rpm ; 설치하였는데, rpm 명령어에 의존적이라 삭제안됨. 패키지 만들 때 /opt/freeware/lib/libz.a 를 참조하지 않게 리네임 하여 백업 후 패키지함.
readline 5.2소스컴파일 설치(정적라이브러리 사용)
zlib 1.2.3 소스컴파일 설치(정적라이브러리 사용)

/usr/lib 의 libz.a -> ../../opt/freeware/lib/libz.a 백업 후 패키지 후 복원

export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java131/jre/bin:/usr/java131/bin:/usr/vac/bin:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=gcc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


8. AIX 5.3

xlc 사용
make-3.80-1.aix5.1.ppc.rpm
bison-1.875-3.aix5.1.ppc.rpm
gettext-0.10.40-8.aix5.2.ppc.rpm
flex-2.5.4a-6.aix4.3.ppc.rpm
zlib 1.2.3 소스컴파일 설치 후 패키지 한 후 삭제함. /opt/freeware/lib/libz.a 리네임 후 패키지한 후 복구.
readline 5.2 소스컴파일 설치 후 패키지 한 후 삭제함.

/opt/freeware/bin 의 명령어들이 모두 /usr/bin 에 링크가 되어 있음.

export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin:/usr/java131/jre/bin:/usr/java131/bin:/usr/vac/bin:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

5300-03 미만 버전은 /usr/include/sys/socket.h 의  _SS_MAXSIZE 를 1280 으로 고친 후 컴파일해야함. 수정하지 않을 시 PostgreSQL 구동이 안된다. AIX 버그이다.


9. AIX 6.1

xlc 사용
make-3.80-1.aix5.1.ppc.rpm
bison-1.875-3.aix5.1.ppc.rpm
gettext-0.10.40-8.aix5.2.ppc.rpm
flex-2.5.4a-6.aix4.3.ppc.rpm
zlib 1.2.3 소스컴파일 설치 후 패키지 한 후 삭제함. /opt/freeware/lib/libz.a 리네임 후 패키지한 후 복구.
readline 5.2 소스컴파일 설치 후 패키지 한 후 삭제함.

/opt/freeware/bin 의 명령어들이 모두 /usr/bin 에 링크가 되어 있음.

export PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java5/jre/bin:/usr/java5/bin:/usr/vac/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


10. HP-UX 11.00  
  HP-UX 의존성 패키지는 http://hpux.cs.utah.edu 에서 다운 받을 수 있었는데, 링크 확인겸 재방문을 해보니 시스템 고장으로 지금은 다운을 받을 수가 없다고 한다.

/usr/local/libtermcap.a : 정적라이브러리
gettext-0.14.1-sd-11.00.depot : 설치되어 있었음
make-3.80-sd-11.00.depot : 패키지 설치
libiconv-1.9.2-sd-11.00.depot : 설치되어 있었음
snprintf-2.2-src-11.11.tar : 소스설치
readline-5.2.tar  : 소스설치

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=cc CFLAGS=+DAportable --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


11. HP-UX 11.11  

/usr/local/libtermcap.a : 정적라이브러리
/usr/local/lib 의 libreadline.sl 과 libz.sl 리네임 후 패키지 함.
bison-2.3-hppa-11.11.depot
flex-2.5.35-hppa-11.11.depot
gettext-0.17-hppa-11.11.depot
libiconv-1.12-hppa-11.11.depot
make-3.81-hppa-11.11.depot
readline-5.2-hppa-11.11.depot
zlib-1.2.3-hppa-11.11.depot

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=cc CFLAGS=+DAportable LDFLAGS="-L/usr/lib -lpthread" --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


12. HP-UX 11.23 ia64 

libtermcap은 정적라이브러리로 패키지함.
/usr/local/lib/hpux32 밑의 libtermcap.so, libreadline.so, libz.so 리네임 후 패키지함.
readline-5.2-ia64-11.23.depot.gz 설치

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib/hpux32

12.1 configure 시 아래 에러 발생

ld: (Warning) Unsatisfied symbol "__divdi3" in file /usr/lib/hpux32/libncurses.so
ld: (Warning) Unsatisfied symbol "__divdf3" in file /usr/lib/hpux32/libncurses.so
ld: (Warning) Unsatisfied symbol "__moddi3" in file /usr/lib/hpux32/libncurses.so

/usr/lib/hpux32/dld.so: Unable to find library 'libintl.so'

gettext 최신버전으로 재설치

12.2 gcc 실행 시 아래 에러 발생

[u@h W]$gcc
/usr/lib/hpux32/dld.so: Unsatisfied code symbol 'pthread_create' in load module '/usr/local/lib/hpux32/libintl.so'.
Killed
3 warnings.

ld: (Warning) Potential unresolved symbol "__divdi3":
shared library reference is resolved to non-exported
definition in file "/opt/hp-gcc-4.1.2/lib/gcc/ia64-hp-hpux11.23/4.1.2/libgcc.a[__divdi3.o]".
ld: (Warning) Potential unresolved symbol "__divdf3":
shared library reference is resolved to non-exported
definition in file "/opt/hp-gcc-4.1.2/lib/gcc/ia64-hp-hpux11.23/4.1.2/libgcc.a[__divdf3.o]".
ld: (Warning) Potential unresolved symbol "__moddi3":
shared library reference is resolved to non-exported
definition in file "/opt/hp-gcc-4.1.2/lib/gcc/ia64-hp-hpux11.23/4.1.2/libgcc.a[__moddi3.o]".
3 warnings.

gcc-ia64-4.1.2.depot.gz 설치로 해결

12.3 make 시 아래 에러 발생

gmake[5]: Entering directory `/usr/local/pgsql_src/postgresql-8.2.6/src/interfaces/ecpg/test/connect'
sed -e 's,@TEMP_PORT@,511106,g' \
  test1.pgc.in >test1.pgc
../../preproc/ecpg -I./../../include -o test1.c -I. test1.pgc
/usr/lib/hpux32/dld.so: Unable to find library 'libreadline.so'.
gmake[5]: *** [test1.c] Killed
gmake[5]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/interfaces/ecpg/test/connect'
gmake[4]: *** [all] Error 2
gmake[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/interfaces/ecpg/test'
gmake[3]: *** [all] Error 2
gmake[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/interfaces/ecpg'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/interfaces'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src'
gmake: *** [all] Error 2

export LD_LIBRARY_PATH=/usr/local/lib/hpux32 로 해결, configure 하기전에 export 해야한다.

./configure CC=gcc LDFLAGS="-L/usr/lib -lpthread" --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib/hpux32


13. HP-UX 11.31 ia64 

libtermcap 정적라이브러리로 재패키지함.
readline-5.2-ia64-11.31.depot.gz
zlib-1.2.3-ia64-11.31.depot.gz
termcap-1.3.1-ia64-11.31.depot
bison-2.3-ia64-11.31.depot
flex-2.5.33-ia64-11.31.depot
gcc-4.1.2-ia64-11.31.depot

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib/hpux32

13.1 initdb 실행 시 아래 에러 발생

$ initdb -E UTF-8 --no-locale -A trust -W -D /usr/local/pgsql/data
/usr/lib/hpux32/dld.so: Unable to find library 'libtermcap.so'.   

export LD_LIBRARY_PATH=/usr/local/lib/hpux32 로 해결, 기본적으로 OS에 포함되는 라이브러리로 보임며, configure 하기전에 export도 해야함.

./configure CC=gcc LDFLAGS="-L/usr/lib -lpthread" --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib/hpux32


14. HP-UX 11.31 PA-RISC

/usr/lib/libtermcap.a 가 기본으로 있고, /usr/local/lib/hpux32 에도 있으나 /usr/lib 의 정적라이브러리가 사용됨.
make-3.81-hppa-11.31.depot : 설치되어 있었음
gcc-4.2.1-hppa-11.31.depot : 설치되어 있었음
gettext-0.16.1-hppa-11.31.depot : 설치되어 있었음
readline-5.2-hppa-11.31.depot
bison-2.3-hppa-11.31.depot
libiconv-1.11-hppa-11.31.depot : 설치되어 있었음
termcap-1.3.1-hppa-11.31.depot : 설치되어 있었음
flex-2.5.35-hppa-11.31.depot
zlib-1.2.3-hppa-11.31.depot

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

14.1 make 시 에러 발생

gcc V4.1.2 설치로 컴파일 에러 해결 : cc로 컴파일 시 알 수 없는 에러 발생, 에러내용 백업해두지 않았음

./configure CC=gcc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


15. HP-UX 11.23 PA-RISC

/usr/lib/libtermcap.a 가 기본으로 있음.
bison-2.3-hppa-11.23.depot
flex-2.5.35-hppa-11.23.depot
readline-5.2-hppa-11.23.depot

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=gcc --prefix=/usr/local/secpgsql --enable-thread-safety --enable-depend --with-pgport=11106 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

15.1 PostgreSQL V8.3.1 소스를 gcc V4.2.2로 컴파일 시 에러 발생

gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv -Wno-error -pthread  -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS -I../include -I../../../../src/interfaces/ecpg/include -I. -DMAJOR_VERSION=4 -DMINOR_VERSION=4 -DPATCHLEVEL=0 -I../../../../src/include -D_XOPEN_SOURCE_EXTENDED  -I/usr/local/include  -c -o preproc.o preproc.c -MMD -MP -MF .deps/preproc.Po
pgc.c:3862: warning: 'yy_flex_realloc' defined but not used
y.tab.c: In function 'base_yyparse':
y.tab.c:32385: internal compiler error: in delete_output_reload, at reload1.c:7932
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
gmake[4]: *** [preproc.o] Error 1
gmake[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg/preproc'
gmake[3]: *** [all] Error 2
gmake[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces/ecpg'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/interfaces'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
gmake: *** [all] Error 2

15.2 cc로 컴파일 시 아래 에러 발생

./configure CC=cc --prefix=/usr/local/secpgsql --enable-thread-safety --enable-depend --with-pgport=11106 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

cc -Ae +O2 -I../../../../src/include -D_XOPEN_SOURCE_EXTENDED  -I/usr/local/include  -c -o elog.o elog.c
cc: error 1405: "/opt/ansic/lbin/ccom" terminated abnormally with signal 11.
gmake[4]: *** [elog.o] Error 9
gmake[4]: *** Deleting file `elog.o'
gmake[4]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/backend/utils/error'
gmake[3]: *** [error-recursive] Error 2
gmake[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/backend/utils'
gmake[2]: *** [utils-recursive] Error 2
gmake[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/backend'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
gmake: *** [all] Error 2

14.2, 14.2 gcc 4.1.2로 설치하여 해결


16. Solaris 6 sparc

솔라리스 의존성 패키지는 http://www.sunfreeware.com 에서 다운받을 수 있다.

gettext-0.14.1-sol26-sparc-local
readline-5.2-sol26-sparc-local
termcap-1.3-sol26-sparc-local
zlib-1.2.3-sol26-sparc-local : 버전이 낮아 재설치
make-3.81-sol26-sparc-local

setenv PATH /bin:/usr/bin:/opt/SUNWspro/SC5.0/bin:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/ucb:/usr/sbin:/etc:.
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

Makefile.global 파일의 LIBS 에 -lnsl 추가해야 컴파일 된다.

16.1 make 무한루프

find ./소스디렉토리 -print | xargs touch 로 소스 디렉토리 시간 맞춰준다.

16.2 initdb 실행 시 아래 에러 발생

./initdb -E UTF-8 --no-locale -A trust -W -D /usr/local/secpgsql/data
The files belonging to this database system will be owned by user "secdb".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /usr/local/secpgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers/max_fsm_pages ... 400kB/20000
creating configuration files ... ok
creating template1 database in /usr/local/secpgsql/data/base/1 ... FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=1662976, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 1662976 bytes), reduce PostgreSQL's shared_buffers parameter (currently 50) and/or its max_connections parameter (currently 10).
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing data directory "/usr/local/secpgsql/data"

아래와 같이 /etc/system 파일에 공유메모리 설정을 해주어야함. 설정변경 후 서버 재부팅해야 적용됨. Solaris 6, 7, 8은 /etc/system 설정해주어야 initdb 실행됨.

Solaris
At least in version 2.6, the default maximum size of a shared memory segments is too low for PostgreSQL.
The relevant settings can be changed in /etc/system, for example:

set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32

You need to reboot for the changes to take effect.
See also http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html for information
on shared memory under Solaris.

/etc/system 을 /etc/system.orig 로 백업해둠.

setenv PATH "/usr/local/secpgsql/bin:$PATH"
setenv LD_LIBRARY_PATH "/usr/local/secpgsql/lib:$LD_LIBRARY_PATH"

/etc/system 설정 변경 후 initdb 시 내용

selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 24MB/153600

./configure CC=cc LDFLAGS="-L/usr/lib -lpthread -lnsl" --prefix=/usr/local/pgsql --enable-depend --enable-thread-safety --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


17. Solaris 7 sparc

expat-2.0.1-sol7-sparc-local
gettext-0.14.1-sol7-sparc-local
make-3.81-sol7-sparc-local
readline-5.2-sol7-sparc-local

/usr/lib/libtermcap.so* 를 리네임. 패키지 후 복구함.

setenv PATH /bin:/usr/bin:/opt/SUNWspro/bin:/opt/SUNWspro/SC5.0/bin:/usr/ccs/bin:/usr/local/sbin:/usr/local/bin:/usr/local/webtob/bin:/usr/ucb:/usr/sbin:/etc:.
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

./configure CC=cc LDFLAGS="-L/usr/lib -lpthread -lnsl" --prefix=/usr/local/secpgsql --enable-depend --enable-thread-safety --with-pgport=11106 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

17.1 configure 시에 thread safe 에러가 나는데, --with-libraries=/usr/local/lib 추가해줌

make[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/timezone'
cc -Xa -v -DSUNOS4_CC -O -L../../src/port -L/usr/local/lib -Wl,-R'/usr/local/secpgsql/lib'  access/SUBSYS.o bootstrap/SUBSYS.o catalog/SUBSYS.o parser/SUBSYS.o commands/SUBSYS.o executor/SUBSYS.o lib/SUBSYS.o libpq/SUBSYS.o main/SUBSYS.o nodes/SUBSYS.o optimizer/SUBSYS.o port/SUBSYS.o postmaster/SUBSYS.o regex/SUBSYS.o rewrite/SUBSYS.o storage/SUBSYS.o tcop/SUBSYS.o utils/SUBSYS.o ../../src/timezone/SUBSYS.o ../../src/port/libpgport_srv.a -lrt -lsocket -ldl -lm -o postgres
Undefined                       first referenced
 symbol                             in file
gethostbyname                       ../../src/port/libpgport_srv.a(getaddrinfo_srv.o)  (symbol belongs to implicit dependency /usr/lib/libnsl.so.1)
h_errno                             ../../src/port/libpgport_srv.a(getaddrinfo_srv.o)  (symbol belongs to implicit dependency /usr/lib/libnsl.so.1)
inet_ntoa                           ../../src/port/libpgport_srv.a(getaddrinfo_srv.o)  (symbol belongs to implicit dependency /usr/lib/libnsl.so.1)
ld: fatal: Symbol referencing errors. No output written to postgres
make[2]: *** [postgres] Error 1
make[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src/backend'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.2.6/src'
make: *** [all] Error 2  

해결을 위해 Makefile.global 파일에 -lnsl 추가 : LIBS = -lz -lreadline -ltermcap -lrt -lsocket -ldl -lm -lnsl

./initdb -E UTF-8 --no-locale -A trust -W -D /usr/local/secpgsql/data
The files belonging to this database system will be owned by user "secdb".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory /usr/local/secpgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers/max_fsm_pages ... 400kB/20000
creating configuration files ... ok
creating template1 database in /usr/local/secpgsql/data/base/1 ... FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=1662976, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 1662976 bytes), reduce PostgreSQL's shared_buffers parameter (currently 50) and/or its max_connections parameter (currently 10).
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing data directory "/usr/local/secpgsql/data"


/etc/system 에 아래내용추가 후 리부팅

set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32


18. Solaris 8 sparc

/usr/lib/libtermcap.so, /usr/lib/libtermcap.so.1 이 기본으로 있음.(리네임 후 패키지 후 복구)
/usr/lib 의 libtermcap.so, libtermcap.so.1, libz.so, libz.so.1, libz.so.1.tar 백업 후 패키지 후 복구
/usr/include 의 zconf.h  zlib.h 백업 후 패키지 후 복구
expat-2.0.1-sol8-sparc-local
gettext-0.14.1-sol8-sparc-local
zlib-1.2.3-sol8-sparc-local : 동적라이브러리는 리네임 후 사용함.
readline-5.2-sol8-sparc-local : 동적라이브러리는 리네임 후 사용함.
termcap-1.3-sol8-sparc-local : 정적라이브러리만 설치됨.

setenv PATH /bin:/usr/bin:/data/SS11/SUNWspro/bin/:/DATA/Crash_Scat/SUNWscat/bin:/usr/ccs/bin:/usr/ucb:/usr/sbin:/etc:/usr/local/bin:/data/informix:/bin
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


19. Solaris 9 sparc

autoconf-2.62-sol9-sparc-local
gettext-0.14.1-sol9-sparc-local
make-3.81-sol9-sparc-local
readline-5.2-sol9-sparc-local
bison-2.3-sol9-sparc-local
libiconv-1.11-sol9-sparc-local
zlib-1.2.3-sol9-sparc-local
expat-2.0.1-sol9-sparc-local
libintl-3.4.0-sol9-sparc-local
flex-2.5.35-sol9-sparc-local
m4-1.4.10-sol9-sparc-local

/usr/lib 의 libtermcap.so, libtermcap.so.1, libz.so, libz.so.1 백업 후 패키지 후 복구, /usr/lib/libtermcap.a 가 있음
/usr/include 의 zconf.h  zlib.h 백업 후 패키지 후 복구
/usr/local/lib 의 libreadline.so, libreadline.so.4, libreadline.so.5, libz.so, libz.so.1, libz.so.1.2.3 백업 후 패키지 후 복구

setenv PATH /bin:/usr/bin:/DATA/SUNWspro/bin:/opt/SUNWscat/bin:/usr/ccs/bin:/usr/ucb:/usr/sbin:/etc:/usr/local/bin
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

/etc/system 기본 내용으로 실행됨. (별다른 설정이 없음.)

initdb 시 내용: 기본설정으로 pgsql 구동됨.
selecting default max_connections ... 40
selecting default shared_buffers/max_fsm_pages ... 5600kB/20000


20. Solaris 10 sparc

expat-2.0.1-sol10-sparc-local
readline-5.2-sol10-sparc-local
zlib-1.2.3-sol10-sparc-local

/usr/lib 의 libz.so, libz.so.1 백업 후 패키지 후 복원
/usr/include 의 zlib.h, zconf.h 백업 후 패키지 후 복원
/usr/lib/libtermcap.so 와 libtermcap.so.1 이 있고, libtermcap.a 는 없음.(명령어 실행 시 물고올라감. libcurses.so.1 =>  /usr/lib/libcurses.so.1)

setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib
setenv PATH /bin:/usr/bin:/opt/SUNWspro/SC5.0/bin:/usr/ccs/bin:/usr/ucb:/usr/sbin:/etc:/usr/local/bin

./configure CC=cc --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

initdb 시 내용

selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 32MB/204800


21. Solaris 10, Solaris 9 x86

setenv PATH /usr/local/bin:/bin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/sbin:/opt/SUNWscat/bin
setenv LD_LIBRARY_PATH /usr/local/lib:/usr/lib:/usr/local/pgsql/lib:/usr/local/lib/secpgsql

./configure CC=cc LDFLAGS="-L/usr/lib -lpthread" --prefix=/usr/local/pgsql --enable-depend --enable-thread-safety --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib


22. Solaris 5 sparc

autoconf-2.62-sol25-sparc-local
bison-2.3-sol25-sparc-local
expat-2.0.1-sol25-sparc-local
flex-2.5.35-sol25-sparc-local
gettext-0.14.1-sol25-sparc-local
libintl-3.4.0-sol25-sparc-local
m4-1.4.10-sol25-sparc-local
make-3.81-sol25-sparc-local
readline-5.2     : 정적라이브러리로 소스 컴파일하여 설치함
snprintf-2.2-sol25-sparc-local
termcap-1.3-sol25-sparc-local   : 정적라이브러리로 설치됨
zlib-1.2.3     : 정적라이브러리로 소스 컴파일하여 설치함.
zlib-1.2.3-sol25-sparc-local   : 위의 소스 컴파일 설치한 것 삭제하고 본 패키지 설치함.(vsnprinf 못찾음 -lsnprintf 추가)

libgcc      : 설치되어 있는것 사용
libiconv     : 설치되어 있는것 사용

setenv PATH /bin:/usr/bin:/opt/SUNWspro/SC5.0/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:/usr/sbin:/etc:.
setenv LD_LIBRARY_PATH /usr/lib:/usr/local/lib

./configure CC=cc --prefix=/usr/local/pgsql --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

22.1 Makefile.global 에서 LIBS 에 -lnsl 추가해야 컴파일됨.

22.2 make 무한루프

touch 로 소스시간 맞춰줌.

22.3 initdb 실행 시 에러 발생

creating template1 database in /usr/local/secpgsql/data/base/1 ... FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=1794048, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 1794048 bytes), reduce PostgreSQL's shared_buffers parameter (currently 50) and/or its max_connections parameter (currently 13).
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing contents of data directory "/usr/local/secpgsql/data"

/etc/system 에 아래내용추가 후 리부팅

set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32


./configure CC=cc LDFLAGS="-L/usr/lib -lpthread -lnsl -L/usr/local/lib -lsnprintf" --prefix=/usr/local/pgsql --enable-depend --enable-thread-safety --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

22.4 make 시 에러 발생

cc -Xa -v -DSUNOS4_CC -O pg_dump.o common.o pg_dump_sort.o pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o pg_backup_files.o pg_backup_null.o pg_backup_tar.o dumputils.o  ../../../src/backend/parser/keywords.o -L../../../src/port -lpgport -L../../../src/interfaces/libpq -lpq -L../../../src/port -L/usr/lib -lpthread -lnsl  -L/usr/local/lib -Wl,-R'/usr/local/secpgsql/lib' -lpgport -lz -lreadline -ltermcap -lposix4 -lsocket -ldl -lm  -o pg_dump
Undefined                       first referenced
 symbol                             in file
vsnprintf                           /usr/local/lib/libz.a(gzio.o)
ld: fatal: Symbol referencing errors. No output written to pg_dump
make[3]: *** [pg_dump] Error 1
make[3]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/bin/pg_dump'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src/bin'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/pgsql_src/postgresql-8.3.1/src'
make: *** [all] Error 2

configure에 옵션의 LDFLAGS에 -lsnprintf 추가하여 해결


23. Unixware 7.1.2 x86

readline 5.2 소스 설치
zlib 1.2.3 소스설치

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib

./configure CC=cc LDFLAGS="-D_EFTSAFE" --prefix=/usr/local/pgsql --enable-thread-safety --enable-depend --with-pgport=5432 --with-includes=/usr/local/include --with-libraries=/usr/local/lib

23.1 아래내용 소스 수정하여 컴파일

src/test/thread/thread_test.c 82라인 sigwait "#if 0"로 주석처리함.
/usr/include/signal.h 파일의 sigwait(,); 함수 아규먼트 두 개인 함수만 define 해서 컴파일함.

23.2 initdb 에러 내용

$ ./initdb -E UTF-8 --no-locale -A trust -W -D /usr/local/secpgsql/data
The files belonging to this database system will be owned by user "secdb".
This user must also own the server process.

The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".

creating directory /usr/local/secpgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers/max_fsm_pages ... 400kB/20000
creating configuration files ... ok
creating template1 database in /usr/local/secpgsql/data/base/1 ... FATAL:  could not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=1777664, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 1777664 bytes), reduce PostgreSQL's shared_buffers parameter (currently 50) and/or its max_connections parameter (currently 13).
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about shared memory configuration.
child process exited with exit code 1
initdb: removing data directory "/usr/local/secpgsql/data"

해결을 위해 커널 파라미터 값 변경하여 적용, 재부팅해야됨

# /etc/conf/bin/idtune -g SHMMAX
524288  524288  131072  2147483647
# /etc/conf/bin/idtune SHMMAX 536870912
# /etc/conf/bin/idbuild -B
UX:idbuild: INFO:
        The unix kernel will be rebuilt now.
        This will take some time. Please wait.

UX:idbuild: INFO: The unix kernel has been rebuilt.

# /etc/conf/bin/idtune SHMMIN 1
#reboot

# /etc/conf/bin/idtune -g SHMMIN
1       1       1       1
# /etc/conf/bin/idtune -g SHMMNI
200     100     10      1000
# /etc/conf/bin/idtune -g SHMSEG
15      6       6       15
# /etc/conf/bin/idtune -g SHMALL
512     512     256     2048

커널 파라미터 값

# uname -a
UnixWare u713 5 7.1.3 i386 x86at SCO UNIX_SVR5

# /etc/conf/bin/idtune -g SHMMAX
134217728       134217728       131072  2147483647

# /etc/conf/bin/idtune -g SHMMIN
1       1       1       1

./initdb -E UTF-8 --no-locale -A trust -W -D /usr/local/pgsql/data

서버 재부팅 시 꼭 init 6 레벨로 재부팅 해야 커널파라미터 변경값 적용됨. : shutdown -y -g0 -i6


24. 결론
  이상으로 정리를 마친다. 오픈소스 DBMS가 상용 DBMS에 비해 상용 시장에서 외면을 당하고 있는 실정이나 조금만 관심을 기울이고 노력을 한다면 저렴한 비용과 그 이상의 성능을 발휘할 수 있다. 얼마전 기사에서 어떤 업체가 사용하고 있던 상용 DBMS를 PostgreSQL로 마이그레이션을 한다고 한다. 상용 DBMS의 대부분의 환경을 보면 고가의 장비에서 구동된다. 이에 비해 오픈 소스 DBMS의 경우 구입 가격이나 유지보수 비용이 안든다는 이유로 중소규모의 사용환경에서 많이 사용된다. 하지만 동급의 환경에서 최적화될 경우 상용 DBMS보다 좋은 결과물을 보여주기도 한다. 물론 꾸준한 관리와 노력이 필요하다. 추후 시간이 된다면, libpq를 이용한 간단한 프로그래밍이나 MS Windows 플랫폼상의 패키지 만드는 것과 설치에 대해서 살펴보고자 한다.

25. 기타

  http://www.postgresql.org/docs/current/static/installation-platform-notes.html

Posted by dcmru
,

현재 PostgreSQL을 사용중인데, like '%XX'%' 를 사용하여 검색을 하니 데이타가 많이 쌓일 경우 속도가 너무 느리게 나온다. 그래서 검색중에 DSN에서 찾은 것이 full text index인 tsearch2이다. full text index 는 쉽게 게시판에서 검색을 할 때 글 내용 검색으로 생각하면 될 것 같다. DBMS별로 해당기능들이 있는것 같으며, PostgreSQL에는 tsearch2를 쓸 수 있다. 아직 한글 검색기능이 없어 해당 기능을 구현하려는 분들의 노고가 보였다.

DSN을 참고로 문의 글까지 올려가며,http://database.sarang.net/?inc=read&aid=5125&criteria=pgsql&subcrit=&id=&limit=20&keyword=tsearch&page=2

http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch2-guide.html 와 같이 참고를 하면서, 테스트를 하였다.

하지만 원래 검색보다 쿼리플랜을 통해 보면, 속도가 더 느리게 나온다. 설정을 잘못한것인가? 일단 언어에 최적화 되어 있는것 같은데, 기본인 simple로 설정해서 사용하였다. 단어별로 vector 형식으로 저장을 하고, gist 인덱스를 사용했다. 무엇이 잘못되었을까? 일단 테이블 두 개를 조인을 하였다. 그제서야 속도 차이가 반대로 나온다. 하지만 만족스럽지 않다. 실 데이타도 인덱스 때문에 크기가 두 배로 늘어난 상태이고, 장점을 못찾겠다. tsvector 형태의 컬럼을 쿼리해보면, y로 끝나는 단어는 i로 변경되어 저장되어 있다. 그리고 예외 단어라고 이해한 기능으로 의문사와 같은 형태의 단어는 저장이 되지 않는다. 계속 테스트 해봐야겠지만, 자주 쓰는 쿼리 결과는 캐시에 저장이 되는지, 1초 이내의 빠른 속도를 보이기도 한다. 하지만 다른 단어를 검색하면, 다시 느려지는 속도를 보면서, 튜닝의 길은 멀구나를 느꼈다.

최적화가 될 때까지 튜닝을 해봐야겠다. 도움주실분? ^^
Posted by dcmru
,
서버를 관리하면서 백업 및 복구할 때 필요한 명령어이다.

가끔씩 써서 잊어먹는데, 한 번씩 상기시키면 유용하다.


백업

mysqldump -u root -p homepage > homepage_000000.sql

설명:

mysqldump 백업 명령어
-u root 유저
-p 패스워드를 사용한다.
homepage 데이터베이스 이름
> 파일 출력
homepage_000000.sql 저장할 파일 이름


복구

mysql -u root -p homepage < homepage_000000.sql

백업 명령어 반대.
Posted by dcmru
,
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <errno.h>

void main(void)
{
MYSQL mysql;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql, NULL, "USER_ID", "PASSWORD", NULL, 3306, (char *)NULL, 0))
{
printf("%s\n",mysql_error(&mysql));
exit(1);
}

printf("성공적으로 연결되었습니다.\n");

mysql_close(&mysql);
}

설명을 하자면 C API의 mysql_real_connect를 이용하여 접속하는 것이며 에러발생 시 에러코드를 출력하며, 접속성공 시에 "성공적으로 연결되었습니다."를 출력하는 프로그램이다. 환경은 페도라 코어2에 gcc는 3.3.3버전, mysqlms 4.0.20버전이며 컴파일 명령은
gcc -o test test.c -I/usr/local/mysql/include/mysql -L/usr/local/mysql/lib/mysql -lmysqlclient -lz 이다.
Posted by dcmru
,
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <errno.h>
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;

void exiterr(int exitcode) /*에러코드를 출력하는 함수*/
{
fprintf(stderr, "%s\n", mysql_error(&mysql));
exit(exitcode);
}
int main()
{
uint i = 0;
uint temp1;
char temp2;
char query[50];
int temp3 = 1;

while(temp3)
{
printf("Input social security number : ");
scanf("%d", &temp1);
sprintf(query,"select * from testtable where ssn = %d",temp1); /*query에 sql문을 복사 */

if(!mysql_real_connect(&mysql, "localhost", "USERID", "PASSWORD", NULL, 3306, (char *)NULL, 0)) /*mysql에 접속*/
exiterr(1);
if(mysql_select_db(&mysql,"testdb")) /*데이터베이스 선택*/
exiterr(2);
if(mysql_query(&mysql, query)) /*쿼리문 실행*/
exiterr(3);
if(!(res = mysql_store_result(&mysql)) /*결과를 저장*/)
exiterr(4);

printf("SSN FNAME MINIT LNAME ADDRESS\t\t\t\t\t\t\tSALARY\n");

while((row = mysql_fetch_row(res))) /*결과 출력*/
{
for(i=0; i < mysql_num_fields(res); i++)
printf("%s ", row[i]);
}

printf("\n");
if(!mysql_eof(res))
exiterr(5);
mysql_free_result(res); /*해제*/
mysql_close(&mysql); /*접속을 닫는다*/

printf("More social security numbers (Y or N)? ");
scanf("%s", &temp2);
if(temp2 == 'n' || temp2 == 'N')
temp3 = 0;
else
continue;
}
}


한 이틀 잡고 짠 소스이다. 교수님께서 데이터베이스론 수업 중 나온 파스칼로 짜여진 프로그램을 C언어로 바꿔보라고 하였다. 파스칼로 짜여진 소스는 무척이나 간단해 보였는데 C언어로 바꾸니 분량이 장난아니게 늘어났다. embedded sql의 예로, 생각해보곤데, 칩 같은 곳에 소스를 넣어 실행하게 할 수 있을듯하다. 여러가지 데이터베이스 연동 소스들을 짜서 데이터베이스를 모르는 사람도 쉽게 접근하게 할 수 있는 방법인듯하다. 역시 짤 때는 모르니 어떻게 할지 막막한데, 짜고나면 아무것도 아닌 것같다. 처음에는 오라클의 proc를 써볼려고 했는데, 오라클 설치를 해야하고 proc문법을 배워야해서 방향을 바꿔 내가 관리하고 있는 연구실 서버에 mysql이 설치되어 있어 이 것으로 해본 것이다. 컴파일은 gcc 3.3.3버전으로 하였으며 mysql은 4.0.20버전이다. 소스 중간에 USERID는 mysql 계정이며, PASSWORD는 비밀번호이다. 컴파일 할 때 삽질을 조금 했는데, -lz 옵션을 안주어 컴파일이 안되 4시간동안 인터넷을 찾아 해매었다. 컴파일 명령은
gcc -o test test.c -I/usr/local/mysql/include/mysql -L/usr/local/mysql/lib/mysql -lmysqlclient -lz 이다.
실행화면은 다음과 같다.

mysql> select * from testtable;
+------+-------+-------+-------+-----------------------------------------------------------+--------+
| ssn | fname | minit | lname | address | salary |
+------+-------+-------+-------+-----------------------------------------------------------+--------+
| 1111 | 김 | 대 | 청 | 대전 동구 용운동 대전대학교 데이터베이스연구실 4211-3호실 | 2000 |
| 1112 | 김 | 현 | 창 | 대전 동구 용운동 대전대학교 데이터베이스연구실 4211-3호실 | 2200 |
| 1113 | 김 | 남 | 기 | 대전 동구 용운동 대전대학교 데이터베이스연구실 4211-3호실 | 1800 |
+------+-------+-------+-------+-----------------------------------------------------------+--------+
3 rows in set (0.00 sec)
Posted by dcmru
,
ORACLE
장점
-새로운 XML 파일 시스템 제공.
-XML 개방 표준제공.
-동일한 데이터 모델에서 XML과 관계형 데이터간의 통합.
-대용량 XML 문서에 대한 최적화된 저장 영역 제공.
-확장성과 고성능 제공.
단점
-오라클8i의 경우 XML로 형식으로 저장할 때 DTD, XSU, XML이 따로따로 저장되기 때문에 이 세가지를 분해하는 중간에 미들웨어가 필요하므로 시간이 걸린다.
-오라클9i의 경우 대용량의 XML 컨텐츠 저장, 검색시 분해과정을 거치지 않으므로, 속도가 빠르다, 하지만 저용량의 XML 컨텐츠 저장, 검색시 기존의 DBMS가 더나은 성능을 가진다.
-높은 비용,
-어려운 관리와 튜닝 기능,
-대형 서버 클러스터의 범용성 증명되지 않음


eXcelon
장점
-전자상거래 등의 웹 환경을 위한 응용 프로그램을 쉽게 제작할 수 있다(웹 서버의 익스텐션과 서버 익스텐션의 활용).
-XML 문서의 법용성을 이용해서 다양한 B2B 요구를 쉽게 수용하여 데이터를 변형할 수 있을 뿐만 아니라, DOM을 직접 서버에서 활용하여 더 빠른 데이터 변형, 갱신 등의 처리결과를 얻을 수 있다.
-XSL, XPATH, DOM 등을 W3C의 규약에 맞추어 표준화를 충실히 반영하고 있으므로, 범용성과 확장성이 뛰어나다.
-Excelon DB는 캐쉬를 DB 서버에 둘 수 있을 뿐만 아니라, 비즈니스 로직을 담당하는 웹 서버에도 캐쉬를 운영할 수 있기 때문에, DB 서버의 용량을 늘리지 않고도, 확장하는 효과를 다양하게 얻을 수 있다.
단점
-도입 비용상의 문제와 아직까지 XML을 표준화하여 작업하는 곳이 RDB보다는 적다는 취약점이 있다.
Posted by dcmru
,
DBMS의 종류
1. 계층형 데이터베이스 관리시스템 (HDBMS)
⇒ 에플리케이션 환경의 여러 명의 사용자가 통합된 데이터를 공유
⇒ 파일시스템에서 처리 못한 부수적인 처리들을 어느 정도 DBMS들이 처리
⇒ 그러나 데이터베이스 모델링 및 관리가 용이하지 않음
⇒ Record들을 계층구조로 표현한 데이터 모델
- Database는 세그먼트(레코드 타입)로 이루어진다.
- 한 레코드 타입은 여러 개의 레코드를 포함한다.
- 한 레코드는 필드들로 구성된다.
- 한 필드는 한 개 또는 그이상의 자료항목들(반복그룹)을 포함한다.
- 한 레코드는 다른 레코드 등에 대해 한 개 이상의 포인터들을 가지고 있다.
(부모는 반드시 자식을, 자식은 형제 레코드들의 포인터와 그들만의 자식에 대한 포인터를 가지고 있다.)
- Database Search(검색)는 첫 번째 레코드를 찾아낸 후에 다음 Record를 Pointer로써 읽는다.
- Data사이의 동적(Dynamic)인 상호 연관사항은 존재하지 않는다.
- Database Schema에 대한 동적인 변화는 없다.
- Data Independence의 보장이 안 된다.
즉, Record Format이 변하면 에플리케이션도 모두 바뀌어야 한다.
종류로는 IBM IMS DB 가 있다...

2. 네트워크형 데이터베이스 관리시스템 (NDBMS)
⇒ HDBMS와 특징이 유사하다.
⇒ 데이터베이스는 레코드 타입과 링크(Pointer들의 집합)로 구성된다.
⇒ 한 레코드는 자식들과 형제 레코드들에 대한 포인터와 HDBMS에서 는 불가능했던 부모 레코드들에 대한 포인터를 가질 수있다.
⇒ 데이터 모델링이 복잡하여 사용이 일반화되지 않았다.
종류로는 CODASYL DB 가 있다...

3. 관계형 데이터베이스 관리시스템 (RDBMS)
⇒ SQL(Structured Query Language) 지원
⇒ 이전에 에플리케이션에서 처리해야 했던 많은 기능들을 DBMS가 지원
- 데이터 무결성, 보안, 권한, 트랜젝션 관리, 록킹(Locking)등
⇒ 데이터 모델링이 간편해지고 에플리케이션 개발을 용이하게 지원
⇒ 데이터 모델링이 너무 간단하기 때문에 복합 에플리케이션 (CAD/CAM, CASE, Multimedia, GIS등)에는 적합하지 않음
⇒ 데이터베이스 특징
- 데이터베이스는 테이블들로 구성된다.
- 레코드(로우; 행)는 필드(컬럼)로 구성된다.
- 한 필드는 단지 하나의 Data Item을 갖는다.
- 레코드는 다른 레코드에 대하여 어떤 Pointer라도 갖지 못한다.
- Data사이의 동적(Dynamic)인 상호 관계는 조인(Join)을 통하여 일어난다. 성능 문제가 중요하게 발생함
- 데이터베이스 스키마(Schema)에 대한 동적인 변화들이 가능하다. 예) 테이블에 대한 새로운 필드의 추가, 삭제
- 한 필드는 하나의 Data Item만을 포함한다. 레코드들을 중복시킴으로서 성능 함정에 빠질 수 있다.
- 멀티 미디어 자료 지원이 불가능
종류로는 IBM DB2, ORACLE, INFORMIX, SYBASE, INGRES, MS-SQL 등이 있다...

4. 객체지향형 데이터베이스 관리시스템 (OODBMS)
⇒ 멀티미디어 데이터의 지원이 가능
⇒ 재사용 가능한 객체 모듈의 지원
⇒ 캡슐화(Encapsulation), 계승(유전; Inheritance Hierarchy), 폴리모피즘(다형성; Polymorphism)등 프로그래밍에 도움을 주는 특성의 보유
⇒ 레코드와 레코드 사이의 데이터 검색이나 작업이 포인터(Pointer)에 의하여 이루어지므로 성능 문제가 대두되지 않는다.
⇒ 분석.설계(데이터 모델링)의 품질이 프로그래밍에 절대적인 영양을 준다.
⇒ 상용 DBMS 대부분이 아직 개발자들을 위한 충분한 개발지원도구와 이기종의 시스템이나 운영체제 및 호환을 위한 인터페이스를 갖추고 있지 못하다.
⇒ 객체지향 방법론이 완벽하지 못하다.
종류로는 Objectivity, O2, Versant, Ontos, Gemstone 등이 있다...

5. 객체관계형 데이터베이스 관리시스템 (ORDBMS)
⇒ OODBMS와 특징이 비슷
⇒ OODBMS의 장점과 RDBMS의 장점만을 취함
-RDBMS의 데이터 모델을 그대로 활용하여 어렵고 까다로운 OODBMS의 데이터 모델링 문제를 해결
- 기존의 RDBMS를 기반으로 하는 많은 DB시스템과의 호환이 가능
- RDB의 중요한 문제점들인 반복그룹, 포인터 추적, 자료형의 한계를 제거
- 복잡한 DB Schema Modeling에 대하여 Encapsulation, Inheritance의 잇점 추가
- 로우(행, 레코드)나 컬럼(필드, 속성)이 한 개 이상의 Data Item값을 갖도록 반복그룹의 허용
종류로는 Unisql, Object Store, 순수 RDBMS의 확장 모델등이 있다...

DBMS(데이터베이스 관리 시스템)의 장단점
1. 장점
⇒ 데이터 중복의 최소화
파일 시스템에서는 각 응용 프로그램마다 자신의 파일이 개별적으로 관리 유지되기 때문에 전체적으로 저장되는 데이터의 입장에서 보면 상당히 많은 데이터가 같은 내용을 표현하면서 중복적으로 저장되고 있다. 그러나, 데이터베이스는 데이터를 통합하여 구성함으로써 이러한 중복을 사전에 통제할 수 있다. 이것은 물론 데이터의 중복을 완전히 배제한다는 것을 의미하는 것은 아니다. 왜냐하면 통합 데이터베이스 환경속에서도 성능 향상의 이유로 데이터의 중복이 불가피할 때가 있기 때문이다.

⇒ 데이터의 공용
같은 내용의 데이터를 여러 가지 구조로 지원해 줄 수 있는 DBMS의 복잡하고도 정교한 기법 때문에 데이터베이스의 데이터 공용이 가능하다. 이것은 기존 여러 응용 프로그램들이 수행하던 데이터에 대한 유지 관리 부담을 면제시켜 줄뿐만 아니라 새로 개발하는 응용 프로그램에 대해서도 데이터 구성에 신경 쓸 필요없이 응용 자체에만 전념할 수 있게 해준다는 것을 의미한다.

⇒ 데이터의 일관성 유지
현실 세계의 어느 한 사실을 나타내는 두 개의 데이터가 있을 때 오직 하나의 데이터만이 변경되고 다른 하나는 변경되지 않는다면 데이터간의 불일치성, 즉 모순성을 갖게 된다. 모순성을 내포한 데이터베이스는 서로 상충되는 정보를 제공하게 되고 데이터베이스의 유용성을 저해하게 된다. 데이터베이스는 관리 시스템은 바로 이 데이터의 중복을 제어하고 중앙 집중식 통제를 통해 데이터의 일관성을 유지할 수 있다.

⇒ 데이터의 무결성 유지
무결성이란 데이터베이스에 저장된 데이터값과 그것이 표현하는 현실세계의 실제값이 일치하는 정확성을 말한다. 데이터 중복성이 완전히 제거된다고 하더라도 허용되지 않는 값이나 부정확한 데이터가 여러 가지 경로에 의해 데이터베이스에 잠입될 수 도 있다. 데이터베이스 관리 시스템은 데이터베이스가 생성 조작될 때마다 제어 기능을 통해 그 유효성을 검사함으로써 데이터의 무결성을 유지할 수 있다.

⇒ 데이터의 보안 보장
DBMS는 데이터베이스를 중앙 집중식으로 총괄, 관장함으로써 데이터베이스의 관리 및 접근을 효율적으로 통제할 수 있다. 이것은 DBMS가 정당한 사용자, 허용된 데이터와 연산등을 확인 검사함으로써 모든 데이터에 대해 철저한 보안을 제공한다.
일반적으로 같은 내용의 데이터가 여러 파일에 분산 관리될 때 같은 수준의 보장되기는 상당히 어렵다.

⇒ 표준화
DBMS의 중앙 통제 기능을 통해 데이터의 기술양식, 내용, 처리방식, 문서화 양식등에 관한 표준화를 범기관적으로 시행할 수 있다.

⇒ 전체 데이터 요구의 조정
한 기관의 모든 응용 시스템들이 요구하는 데이터들을 전체적으로 수집 분석하고 상충되는 데이터 요구는 조정해서 기관 전체에 가장 유익한 구조로 조직하여 효율적인 정보처리 효과를 얻게 할 수 있다.

2. 단점
⇒ 운영비의 증대
DBMS는 가격으로 보아 고가의 제품이고 컴퓨터 시스템의 지원을 많이 사용한다. 특히, 주기억장치를 많이 차지하기 때문에 DBMS를 운영하기 위해서는 메모리 용량이 더 필요하게 되고, 더 빠른 CPU를 요구하게 된다. 결과적으로 시스템 운영비의 오버헤드를 가중시키게 된다.

⇒ 자료 처리의 복잡화(DB데이타의 처리방법이 복잡해져 전문화된 프로그래머가 필요.)
데이터 베이스에는 상이한 여러 타입의 데이터가 서로 관련되어 있다. 응용 프로그램은 이러한 상황속에서 여러 가지 제한점을 가지고 작성되고 수행될지도 모른다. 다라서, 응용 시스템은 설계 시간이 길어지게 되고 보다 전문적, 기술적이 되어야 하기 때문에 고급 프로그래머가 필요하게 된다.

⇒ 복잡한 예비와 회복
데이터베이스는 그 구조가 복잡하고 여러 사용자가 동시에 공용하기 때문에 문제가 일어났을 때 정확한 이유나 상태를 파악하기 어려울 뿐만 아니라 여기에 대한 예비(Backup, 백업)조치나 사후회복 (Recovery, 복구)기법을 수립해 놓는 것도 매우 어렵다.

⇒ 시스템의 취약성
데이터베이스 시스템은 통합된 시스템이기 때문에 그 일부의 고장이 전체 시스템을 정지시켜 시스템 신뢰성과 가용성을 저해할 수 있다. 이것은 특히 데이터베이스에 의존도가 높은 환경에서는 아주 치명적인 약점이 아닐 수 없다.
Posted by dcmru
,