Frequently Asked Questions (FAQ) for PostgreSQL >= V6.1

Linux 관련질문 모음

일반 FAQ와 함께 읽어야 합니다.

마지막으로 고친 날짜: 1998년 5월 11일

원래 쓴 사람 : 앤드류 C.R. 마틴 (martin@biochem.ucl.ac.uk)
우리말로 옮긴 사람 : 정직한 (honest@hitel.net)



이 파일은 다음과 같이 세 부분으로 나뉘어 있습니다.

1.) PostgreSQL 설치하기
2.) 보조프로그램 컴파일하기
3.) 실행시에 겪는 문제들


질문과 답:

1.1) src/Makefile.global 이나 src/Makefile.custom 파일을 어떻게 고쳐야 합니까? 달리 또 고쳐야 할 것이 있나요?
1.2) libreadline 이 없다는 문제가 왜 생깁니까?
1.3) [레드햇 리눅스] libdl 과 dlfcn.h 가 없다는 문제가 왜 생깁니까?
1.4) [슬랙웨어 3.1] libdl 과 dlfcn.h 가 없다는 문제가 왜 생깁니까?
1.5) 백엔드를 컴파일하면 dlfcn.h 를 인클루드할 수 없다는 에러메시지가 나오고는 죽어버립니다.
1.6) GCC 가 -fpic 옵션이 무시되었다는 메시지를 내보냅니다.
1.7) 다음과 같은 경고 메시지를 받았습니다.
         warning: cast from pointer to integer of different size
1.8) [SuSE-Linux 4.2-4.4] curses 와 termcap 이 어디에 있나요?
1.9) ld.so 때문에 문제가 생깁니다. 왜죠?
1.10) 'yy_flush_buffer undefined' 라는 에러가 왜 생깁니까?
1.11) a.out 시스템에서 어떻게 PostgreSQL 을 컴파일해야 합니까?
1.12) 왜 다음과 같은 에러가 나오지요?
        yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
        make: /usr/bin/make: cannot execute binary file
1.13) src/Makefile.global 의 X11_LIB 에 있는 libsocket 과 libnsl 로의 레퍼런스는 무엇입니까?
1.14) [데비안] libtermcap 이 어디 있습니까?
1.15) [레드햇] PostgreSQL 을 RPM 형태로 구할 수 있나요?
1.16) Linux 하에서의 개발자 버전을 컴파일하려다가 다음과 같은 메시지와 함께 컴파일에 실패했습니다
        In file included from /usr/include/sys/sem.h:8, from ipc.c:37:
        /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
        ....
        make: *** [ipc.o] Error 1
1.17) postgres, gcc 를 컴파일하면 signal 11 이 발생되고 중단됩니다.
1.18) MkLinux 에서 6.1.1 을 설치할 수 있습니까?
1.19) make 가 종료되거나 죽는 이유는 뭐죠?
1.20) 486 이나 펜티엄에 최적화시키려면 어떻게 합니까?

2.1) pgtclsh 를 컴파일할 때 링커가 libX11 을 찾지 못합니다.

3.1) createuser 같은 스크립트를 실행시키면 다음과 같은 에러가 나옵니다.
          _fUnKy_POSTPORT_sTuFf_ undefined 
3.2) postmaster 를 실행시키고 나면 'Bad system call(Core dumped) 라는 메시지가 나옵니다.
3.3) postmaster 를 실행시키려고 하면 다음과 같은 에러가 납니다.
        Failed Assertion("!(file != 0):(null)", File:
        "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
        !(file != 0) (0)
        initdb: could not create template database
        initdb: cleaning up.
3.4) createuser 가 왜 작동하지 않나요?
3.5) 다음과 같은 에러는 왜 나는 겁니까?
        IpcMemoryCreate: memKey=155356396 , size=760632 ,
        permission=384IpcMemoryCreate: shmget(..., create, ...)
        failed: Invalid argument
3.6) psql 이 이런 메시지와 함께 종료되고 맙니다
        psql: can't load library 'libpq.so.1'
3.7) 기타 이상한 증상들
3.8) PostgreSQL 이 실행되고 있는동안 시스템을 셧다운 시키면 Linux 가 재부팅되었을 때 꼭 fsck 를 하게 됩니다.
3.9) 회귀 테스트에서 Query 32 는 왜 그렇게 시간이 많이 걸립니까?
3.10) 어떤 date/time 연산에서는 반올림이 이상하게 됩니다.
select '4 hours'::timespan; 을 실행시키면
'3 hours 59 minutes 60 seconds' 가 결과로 나옵니다.

1절 : PostgreSQL 컴파일하기


1.1) src/Makefile.global 이나 src/Makefile.custom 파일을 어떻게 고쳐야 합니까? 달리 또 고쳐야 할 것이 있나요?

makefile 을 가장 쉽게 고치는 방법은 src 디렉토리의 커스터마이즈용 셸스크립트를 실행하여 각각의 환경에 맞는 Makefile.custom 을 만드는 것입니다.

그 외에 해주어야 할 것이라고는 만일 Flex 의 버전 2.5.3 을 가지고 있을 경우에 Flex 를 대치해주는 것입니다. 2.5.3. 버전은 createuser 명령을 수행하지 못합니다. (질문 3.4 를 보세요)

수작업으로 makefile 들을 고친다면 반드시 다음 변수를 설정해 주어야 합니다.

        PORTNAME=       linux
다음 환경변수도 설치하는 환경에 맞게 설정해 주어야 합니다.
        POSTGRESDIR
USE_TCL 옵션을 켜놓는다면 다음 변수들도 설정해야 합니다.
        TCL_INCDIR=
        TCL_LIBDIR=
        TCL_LIB=
        TK_INCDIR=
        TK_LIBDIR=
        TK_LIB=
        X11_INCDIR=
        X11_LIBDIR=
        X11_LIB=
슬랙웨어 3.0 을 사용한다면 아마 이렇게 될 것입니다.
        TCL_INCDIR=     /usr/include/tcl
        TCL_LIBDIR=     /usr/lib
        TCL_LIB=        -ltcl
        TK_INCDIR=      /usr/include/tcl
        TK_LIBDIR=      /usr/lib
        TK_LIB=         -ltk
        X11_INCDIR=     /usr/include/X11
        X11_LIBDIR=     /usr/X386/lib
        X11_LIB=        -lX11
INSTALL 파일과 Makefile.global 에 적혀있는대로 다른 변수들도 알맞게 설정해 주어야 할 것입니다.

1.2) libreadline 이 없다는 문제가 왜 생깁니까?

Linux 시스템에는 보통 GNU 의 readline 라이브러리가 처음부터 설치되어 있지는 않습니다. src/Makefile.global 이나 src/Makefile.custom 파일에서 readline 옵션을 활성화시켜 놓지 않았는지 확인하십시오. 아니면 GNU 의 readline 라이브러리를 설치하셔도 됩니다.

데비안 리눅스는 FreeBSD 와 마찬가지로 readline 라이브러리가 기본으로 설치되어 있습니다.

1.3) [레드햇 리눅스] libdl 과 dlfcn.h 가 없다는 문제가 왜 생깁니까?

이것은 컴파일 하는 도중 마지막 순서에서 dlopen(), dlclose(), 등의 함수를 링크시킬 수 없다는 메시지로 나타납니다.

libdl 라이브러리는 런타임에 사용자제공 함수를 동적으로 링크하기 위해 사용됩니다. 어떤 이유에선지 레드햇 리눅스에는 이것이 빠져 있습니다. 레드햇 4.0 (Colgate) 에서는 고쳐졌습니다.

레드햇 사에서는 새로운 ld.so RPM 패키지를 자사의 FTP 사이트에 올려놓았습니다. 다음 파일을 참고하세요.

ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm

평소와 같은 방법으로 RPM 파일을 인스톨하시면 만사 OK!

주의! 라이브러리를 설치한 후 재컴파일을 하기 전에 configure 를 다시 실행하고서 처음부터 make 를 해야 합니다.

(놀라운 일은 아닙니다만) 라이브러리를 업데이트하고 있는 도중에 프로그램이 라이브러리를 건드리면 시스템이 깨질 수 있다는 보고가 있습니다 (one report of corrupted system) 새 라이브러리를 설치하기 전에 시스템을 리부트 시키고 업그레이드가 이루어지고 있는 중에는 될 수 있으면 프로그램을 실행시키지 않는 것이 좋습니다. 단일사용자 모드로 작업을 하는 것도 좋은 생각입니다.

어려운 방법을 쓰고 싶다면 다음 장소에서 라이브러리와 헤더파일을 구할 수 있습니다.

ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz
다른 방법으로는 이미 컴파일되어 있는 바이너리 파일을 같은 사이트의 /distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb 에서 찾을 수 있습니다. 아니면 질문 1.2 의 설명에 따라 슬랙웨어 3.1 의 이전 릴리즈에 있던 동일한 에러를 잡는 방법을 사용할 수도 있습니다. 확실히 자신있는 것이 아니라면 이 방법은 사용하지 않는 것이 좋습니다.

1.4) [슬랙웨어 3.1] libdl 과 dlfcn.h 가 없다는 문제가 왜 생깁니까?

이것은 컴파일 하는 도중 마지막 순서에서 dlopen(), dlclose(), 등의 함수를 링크시킬 수 없다는 메시지로 나타납니다.

질문 1.3 의 답을 보세요. 슬랙웨어 버전 3.0 까지는 이 라이브러리가 포함되어 있었고, 버전 3.1 의 후기버전에도 역시 포함되어 있지만 초기의 3.1 릴리즈 (1996년 9월 9일 이전 것) 에는 빠져 있으며 많은 CD-ROM 버전들이 초기의 3.1 릴리즈로 제작되었습니다. (놀라운 일은 아닙니다만) 라이브러리를 업데이트하고 있는 도중에 프로그램이 라이브러리를 건드리면 시스템이 깨질 수 있다는 보고가 있습니다 (one report of corrupted system) 새 라이브러리를 설치하기 전에 시스템을 리부트 시키고 업그레이드가 이루어지고 있는 중에는 될 수 있으면 프로그램을 실행시키지 않는 것이 좋습니다. 단일사용자 모드로 작업을 하는 것도 좋은 생각입니다.

가장 쉽게 이 문제를 해결하는 방법은 최근의 슬랙웨어 배포판의 a4 디스크에 있는 ldso.tgz 파일을 가져다가 루트(/) 디렉토리에 풀고, 다음 명령어를 실행하는 것입니다.

        sh install/doinst.sh
설치를 완료하려면 다음을 실행하세요.

        ldconfig
주의! 라이브러리를 설치한 후 재컴파일을 하기 전에 configure 를 다시 실행하고서 처음부터 make 를 해야 합니다.

수동으로 설치하고 싶다면 먼저 dlfcn.h 를 /usr/include 에 설치해야 합니다.

그런 다음, libdl.so.1.7.14 (가장 최근버전이면 됩니다) 를 /lib 에 설치합니다. 그리고 다음의 명령을 실행하세요.

        cd /lib
ln -sf libdl.so.1.7.14 libdl.so.1
ln -sf libdl.so.1 libdl.so
어떤 시스템에서는 (GCC 설정에 따라 다릅니다) 다음 작업을 해주어야 합니다.
        cd /usr/lib
ln -sf /lib/libdl.so .
마지막으로 다음을 실행하세요

        ldconfig
주의! 라이브러리를 설치한 후 재컴파일을 하기 전에 configure 를 다시 실행하고서 처음부터 make 를 해야 합니다.

1.5) 백엔드를 컴파일하면 dlfcn.h 를 인클루드할 수 없다는 에러메시지가 나오고는 죽어버립니다.

질문 1.3/1.4 에 대한 답을 참고하세요. a.out 시스템을 사용하고 있다면 dlfcn.h 보다 먼저 dld 패키지를 (대개의 a.out 시스템에는 기본적으로 포함되어 있지 않습니다) 설치해야 합니다. 질문 1.11 을 보세요.

1.6) GCC 가 -fpic 옵션이 무시되었다는 메시지를 내보냅니다.

GCC 의 이전버전은 -fpic 와 -fPIC 를 둘 다 받아들였습니다. 최근의 버전 (2.7.2?) 은 -fPIC 를 요구하는 것으로 보입니다. 리눅스의 ELF 버전을 사용한다면 -fPIC 가 기본으로 사용되므로 -fpic 는 무시되어도 괜찮습니다.

src/Makefile.global 을 편집하여 CFLAGS_SL 의 값을 바꾸면 문제를 해결할 수 있습니다.

1.7) 다음과 같은 경고 메시지를 받았습니다.

        warning: cast from pointer to integer of different size
Postgres95 의 초기버전에서는 이런 메시지가 나왔으나 무시해도 되는 것이없습니다. PostgreSQL 6.0 에서는 시스템 헤더파일들에 관련된 것들을 (이것 역시 무시해도 되는 것입니다) 제외하고는 이런 메시지가 나오지 않아야 합니다.

1.8) [SuSE-Linux 4.2-4.4] curses 와 termcap 이 어디에 있나요?

SuSE-Linux 4.2 는 curses 가 아닌, ncurses 를 가지고 있습니다. 4.4 에는 둘 다 들어 있는 것 같습니다. SuSE-Linux 의 termcap 라이브러리는 /usr/lib 이 아니라 /usr/lib/termcap 에 들어있습니다. PostgreSQL( V6.0 까지) ---------------------- src/Makefile.custom 의 CURSES_LIB 값을 -lncurses 로 설정하세요 (커스터마이즈 스크립트를 실행하면서 하셔도 됩니다). 그리고 src/Makefile.custom 에 다음 줄을 추가하세요.

        LDADD_BE+= -L/usr/lib/termcap
src/bin/psql/Make 를 편집하여 다음 항목을 수정해야 할 수도 있습니다.

        ifeq ($(PORTNAME), linux)
            LD_ADD+=
이것을 아래과 같이 바꾸세요.

        ifeq ($(PORTNAME), linux)
            LD_ADD+= -ltermcap
PostgreSQL( V6.1 ) ---------------------- 설정(configure) 스크립트는 termcap 라이브러리가 /usr/lib/termcap 에 있다는 것을 알지 못합니다. 따라서 사용자는 추가 검색할 디렉토리를 물어올 때 /usr/lib/termcap 이 라이브러리 디렉토리라는 것을 명시해 주어야 합니다. 이 방법이 효과가 없다면 (필자에게 SuSE 가 없어서 검사해 보지 못했습니다) configure 를 실행한 후, src/Makefile.global 을 편집하여 LDFLAGS 가 있는 줄의 -lreadline 뒤에 -ltermcap 을 추가해 주어야 합니다. (아니면, configure 를 실행시키기 전에 src/Makefile.custom 을 수정해 주어도 됩니다) SuSE 의 어떤 버전은 ncurses 만을 제공하므로 curses 대신 ncurses 를 사용하도록 강제적으로 -lcurses 를 -lncurses 로 바꿔주어야 합니다. (SuSE 5.1 에서 그렇다는 보고가 있습니다)

1.9) ld.so 때문에 문제가 생깁니다. 왜죠?

ELF 하에서 동적인 로딩을 위해 필요한 또하나의 라이브러리인 ld.so 에서 문제가 생긴다면, 아마 사용자가 리눅스의 설치 내지는 (이쪽이 더 가능성이 높은데) 업그레이드를 엉망으로 했을 것입니다. 질문 1.3/1.4 의 답을 보세요. ld.so.x.y.z 를 /lib 에 설치하고 ldconfig 를 실해야 할 겁니다. ld 패키지 중 가장 최근에 나온 안정된 버전은 1.7.14 입니다. 이 글이 쓰여지는 시점에 1.8.x 버전은 아직 실험적인 버전입니다.

1.10) 'yy_flush_buffer undefined' 라는 에러가 왜 생깁니까?

사실 이 문제는 리눅스에만 관련된 문제는 아닙니다만 오래된 리눅스 설치본에서는 공통된 것입니다. PostgreSQL 을 컴파일하기 위해서는 flex 의 최근버전 (2.5.2, 혹은 그 이상) 이 필요합니다. flex 2.5.3 에는 버그가 있으니 주의하세요 질문 3.4 에 자세히 나와있습니다.

1.11) a.out 시스템에서 어떻게 PostgreSQL 을 컴파일해야 합니까?

먼저 dld 라이브러리를 설치해야 합니다. 선사이트(Sunsite)의 다음 위치에서 구할 수 있습니다.
Linux/libs/dld.3.2.7.tar.gz ( ftp://sunsite.unc.edu/pub/Linux/libs/dld.3.2.7.tar.gz)
그런 다음, src/Makefile.custom 에 아래의 내용을 추가하세요.
        LINUX_ELF=
(커스터마이즈하는 스크립트를 사용해도 됩니다)

1.12) make 를 하는 도중에 다음과 같은 에러와 함께 멈춥니다 :

        yacc -d /disk2/PostgreSQL/src/backend/parser/gram.y
        make: /usr/bin/make: cannot execute binary file
Postgres95 의 초기버전에서 있었던 문제입니다. PostgreSQL 은 기본적으로 yacc 가 아니라 bison -y 를 사용합니다.

yacc 는 일반적으로 bison -y 를 부르는 스크립트로 구현된다. 어떤 이유에선지 make 가 이 스크립트를 실행시키지 못한다. (make 의 어떤 버전인지? bash 의 어떤 버전인지?) 이 문제를 해결하기 위해서는 src/mk/port/postgres.mk.linux 를 열어 마지막 줄의

        #YACC = bison -y 
        YACC = bison -y 
로 바꾸어 줍니다.

1.13) src/Makefile.global 의 X11_LIB 에 있는 libsocket 과 libnsl 로의 레퍼런스는 무엇입니까?

1.08 의 문제였습니다. (Sun Solaris 에만 해당됩니다) 1.09 와 6.0 에서는 고쳐졌습니다.

1.14) [데비안] libtermcap 이 어디 있습니까?

Debian Linux 는 termcap 라이브러리를 제공하지 않고 ncurses 를 사용합니다. (ncurses 는 terminfo 를 사용한다) src/bin/psql/Makefile 의 CURSES_LIB 를 변경할 필요는 없습니다. 데비안 리눅스는 libncurses 에서 libcurses 로의 링크를 제공하기 때문이죠 . (SuSE-리눅스와의 차이점입니다 -- 질문 1.8 을 참조하세요)

src/bin/psql/Makefile 을 편집하여 다음 줄을 변경해 주세요.

        ifeq ($(PORTNAME), linux)
LD_ADD+= -ltermcap
이것을 다음과 같이 변경합니다
        ifeq ($(PORTNAME), linux)
LD_ADD+=

1.15) [레드햇] PostgreSQL 을 RPM 형태로 구할 수 있나요?

물론입니다! Michal Mosiewicz ( http://www.pdi.lodz.pl/~mimo) 가 인텔용 PostgreSQL V6.0 RPM 패키지를 제작해서 ftp://ftp.redhat.org/pub/Incoming/Postgres-6.0-1.i386.rpm 에 업로드 해놓았습니다.

이것은 미리 컴파일되어있는 버전이며 소스 RPM 은 글을 쓰는 시점에 있는 위치입니다. (1997년 2월 3일)

1.16) Linux 하에서의 개발자 버전을 컴파일하려다가 다음과 같은 메시지와 함께 컴파일에 실패했습니다 :

        In file included from /usr/include/sys/sem.h:8, from ipc.c:37:
        /usr/include/asm/bitops.h:32: warning: no previous prototype for Set_bit'
        ....
        make: *** [ipc.o] Error 1
리눅스가 해당 인라이니 함수들에 대해 프로토타입을 제공하지 않기 때문에 생기는 문제입니다. 이 문제를 해결하려면 .../src/backend/storage/ipc 디렉토리에 있는 Makefile 을 편집하여 다음과 같이 변경을 해주어야 합니다.
        CFLAGS+=$(INCLUDE_OPT)
이것을 아래와 같이 바꿉니다.
        CFLAGS+=$(INCLUDE_OPT) -Wno-error
../src/backend/storage/lmgr 디렉토리에서도 동일한 작업을 해주세요.

1.17) postgres 를 컴파일하는 도중에 gcc 에서 signal 11 이 발생되고 중단됩니다. 자세히 써보면,

        gcc: Internal compiler error: program cc1 got fatal signal 11
하드웨어 내지 메모리 문제인 것 같습니다. PostgreSQL 은 매우 큰 프로그램이며 gcc 에서 큰 프로그램을 컴파일하는 것은 (PostgreSQL 을 컴파일하거나 커널을 리빌드하는 등) 메모리에 굉장한 부하를 주게 되며, 정상적인 상황에서는 일어나지 않는 에러를 발생시킬 수도 있습니다. 상대적으로 작은 운영체제들은 하드웨어를 그정도까지 혹사시키지 않기 때문에 도스나 윈도우즈에서는 경험하지 못하는 문제일 수 있습니다.

이 문제에 대한 자세한 정보는 다음 장소에서 구할 수 있습니다.

http://www.bitwizard.nl/sig11
이곳에 있는 Sig11 FAQ 에 따르면, 레드햇 5.0 의 gcc 를 사이릭스 프로세서에서 돌릴 때 특정한 문제가 생기는 것 같습니다. 더 자세한 것은 위의 URL 을 참조하세요.

1.18) MkLinux 에서 6.1.1 을 설치할 수 있습니까?

타쯔로 이시이 (Tatsuo Ishii) 가 MkLinux DR2.1 update2 에서 약간의 패치를 한 후에 설치에 성공했습니다. 패치는 아래의 장소에서 구할 수 있습니다.
ftp://ftp.sra.co.jp/pub/cmd/postgres/6.1.1/mklinux.patch.gz

1.19) make 가 종료되거나 죽는 이유는 뭐죠?

gmake 가 완료되기 전에 종료하거나 세그먼트 오류를 일으킨다는 보고가 있었습니다. 세그먼트 오류의 경우에는 gmake 3.74 에서 일어났고, 3.76.1 로 업그레이드하는 것으로 문제가 해결됩니다. 하지만 3.74 가 다른 환경에서는 잘 작동하는 것으로 달려져 있습니다. 간단히 말해, 이런 문제가 생긴다고 보고하기 전에 gmake 를 최신버전으로 업그레이드해 보시기 바랍니다.

1.20) 486 이나 펜티엄에 최적화시키려면 어떻게 합니까?

컴파일러 플래그 초기치로는 486 이나 펜티엄에서 최적화를 수행하지 않도록 되어 있습니다. 최적화를 하려면 Makefile.custom 을 열어 다음 줄을 추가하세요.
        CFLAGS+= -m486
아니면 (아직 많이 사용되고 있지 않은 새 컴파일러에서는)
        CFLAGS+= -mpentium
또는
        CFLAGS+= -mpentiumpro

2절 : 보조 프로그램들 컴파일하기


2.1) The linker fails to find libX11 when compiling pgtclsh 2.1) pgtclsh 를 컴파일할 때 링커가 libX11 을 찾지 못합니다.

src/Makefile.custom 에 다음 줄을 추가하세요.
        X11_LIBDIR = /usr/X11R6/lib

3절 : 실행시의 문제점들


3.1) createuser 같은 스크립트를 실행시키면 다음과 같은 에러가 나옵니다.

        _fUnKy_POSTPORT_sTuFf_ undefined 
Postgres 버전 1.06에서 1.07사이에 있었던 문제입니다. 버전 1.08 이상에서는 수정되었습니다.

3.2) postmaster 를 실행시키고 나면 'Bad system call(Core dumped) 라는 메시지가 나옵니다.

사용자의 커널이 공유메모리를 지원하지 않도록 컴파일 되었다는 뜻입니다. 리눅스 커널을 재컴파일해 공유메모리를 지원하도록 기능을 추가해야 합니다.

3.3) postmaster 를 실행시키려고 하면 다음과 같은 에러가 납니다.

        Failed Assertion("!(file != 0):(null)", File:
        "/usr/local/PostgreSQL/src/backend/storage/file/fd.c", Line: 257)
        !(file != 0) (0)
        initdb: could not create template database
        initdb: cleaning up.
/dev/null 에 대한 퍼미션이 잘못되어 있습니다.

ls -l /dev/null 을 실행시키면 다음과 비슷하게 보일 것입니다.

        crw-rw-rw-  1 root  wheel    2,   2 Oct  8 18:41 /dev/null
퍼미션을 다음과 같이 바꾸어 주세요.
        chmod a+rw /dev/null

3.4) createuser 가 왜 작동하지 않나요?

GNU flex 버전 2.5.3 과 createuser 사이에 문제가 있습니다. flex 를 V2.5.2 로 다운그레이드하거나 2.5.4 로 업그레드해도 되고, V2.5.3 에 doc/README.flex 안에 제공되는 패치를 시켜도 됩니다. V2.5.4 는 다음 장소에서 구할 수 있습니다.
ftp://prep.ai.mit.edu/pub/gnu/flex-2.5.4.tar.gz

3.5) 다음과 같은 에러는 왜 나는 겁니까?:

        IpcMemoryCreate: memKey=155356396 , size=760632 ,
        permission=384IpcMemoryCreate: shmget(..., create, ...)
        failed: Invalid argument
리눅스 커널이 IPC 지원을 제외한 채 컴파일 되었습니다. 커널을 다시 빌드하면서 이 옵션을 켜야 합니다.

3.6) psql 이 이런 메시지와 함께 종료되고 맙니다:

        psql: can't load library 'libpq.so.1'
Psql 이 libpq 라이브러리와 동적으로 연결되도록 컴파일되어 있습니다.

이 문제를 해결하려면 root 로 로긴해서 다음 파일을 편집해야 합니다.

        /etc/ld.so.conf
마지막 줄에 PostgreSQL 라이브러리 디렉토리 (PostgreSQL 이 설치된 곳의 lib 서브디렉토리) 를 알려주는 내용을 추가한 후, 다음을 실행시킵니다.
        /sbin/ldconfig -v
다른 방법으로는 (예를 들어 root 권한을 가지고 있지 않다면) LD_LIBRARY_PATH 환경변수를 사용할 수도 있습니다.

LD_LIBRARY_PATH 환경변수는 공유 라이브러리를 검색할 경로의 목록을 콜론(:)으로 구분해서 가지고 있습니다. 이 목록은 ldconfig 에 의해 지정된 라이브러리를 검색하기 전에 먼저 참조됩니다.

Bash 에서는 다음과 같이 합니다.

        export LD_LIBRARY_PATH='PathToPGSQL'/lib
tcsh 를 사용한다면
        setenv LD_LIBRARY_PATH 'PathToPGSQL'/lib
'PathToPGSQL' 을 적절한 사용자의 PostgreSQL 설치 디렉토리로 바꾸면 됩니다.

ldd 명령을 사용하면 동적으로 연결되는 실행파일이 사용하는 공유라이브러리들의 경로명을 목록으로 볼 수 있습니다.

3.7) 기타 이상한 증상들

제대로 되는 것이 없긴 한데, 증상이 정확히 어떤 것인지 모를 때라면 동적 로더가 libpq 라이브러리의 올바른 버전을 로드하는지 주의해서 살펴보세요. 라이브러리 경로 어디엔가 (예를 들면 /usr/lib 에) 구버전의 라이브러리가 남아있다면 사용자가 로드하려고 했던 새버전 대신 구버전이 로드될 수도 있습니다. 구버전의 라이브러리를 확실히 없애고, 질문 3.6 에서 설명된 라이브러리 로드의 세부사항을 참고하세요.

3.8) PostgreSQL 이 실행되고 있는동안 시스템을 셧다운 시키면 Linux 가 재부팅되었을 때 꼭 fsck 를 하게 됩니다.

이런 일이 있다는 보고가 있는데, 아마도 INSTALL 문서에 제시된 대로 PostgreSQL 을 /etc/inittab 에서 실행시킬 때 나타나는 것 같습니다.

그래서, postmaster 를 rc 스크립트에서 기동시키는 방법을 추천합니다. 슬랙웨어 계열의 릴리즈에서는 /etc/rc.d/rc.local 을 편집하여 포스트마스터를 기동시킬 것입니다. 레드햇 계열에서는 /etc/rc.d/init.d 스켈리튼 파일을 기초로 하여 /etc/rc.d/rc3.d 에 SysV 스타일의 스크립트를 만들어야 합니다.

contrib/linux/postgres.init 에 샘플 파일이 있습니다.

존 로빈슨이 제공한 샘플을 제시합니다. 필요에 따라 수정해서 쓰세요.

#!/bin/sh
#
# postgreSQL.init This shell script takes care of starting and stopping
#               the PostgreSQL postmaster.
#

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# See how we were called.
case "$1" in
  start)
        # Start daemons.
        echo -n "Starting postgres Postmaster daemon:"
        if [ -z "`pidofproc postmaster`" ]
        then
                su postgres -c "/usr/local/pgsql/bin/postmaster -D /home/postgreSQL/data -p 5432 &"
                echo -n " postmaster"
        else
                echo -n " (already running)"
        fi
        echo
        touch /var/lock/subsys/postgres
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down postgres Postmaster daemon: "
        killall -TERM postmaster 2>/dev/null
        killall -TERM postgres 2>/dev/null
        echo
        rm -f /var/lock/subsys/postgres
        ;;
  *)
        echo "Usage: postgres {start|stop}"
        exit 1
esac

exit 0

3.9) 회귀 테스트에서 Query 32 는 왜 그렇게 시간이 많이 걸립니까?

회귀 스크립트에 리눅스 박스에서만 발생되는 버그가 있기 때문입니다. 이를 피해가는 방법이 두 가지 알려져 있습니다. (타츠오 이시이로부터의 정보) 1. regress.sh 에서 다음을 변경하세요.
        time postgres -texecutor -tplanner -Q bench < bench.sql
        postgres -texecutor -tplanner -Q bench < bench.sql
로 바꾸면 됩니다. 2. 테스트를 실행시킨 후, bench.out 의 마지막에 다음과 같은 줄을 삭제하세요.
        85.86user 114.47system 4:49.20elapsed 69%CPU (0avgtext+0avgdata 0maxresident)k
그리고 다음을 입력하세요.
        sh ./perquery < bench.out > & bench.out.perquery

3.10) 어떤 date/time 연산에서는 반올림이 이상하게 됩니다. select '4 hours'::timespan; 을 실행시키면 '3 hours 59 minutes 60 seconds' 가 결과로 나옵니다.

새로운 glibc2 라이브러리를 실행하면서 2.0.7 이전버전을 사용하는 경우입니다. 라이브러리의 반올림기능에 문제가 있습니다. 라이브러리를 업그레이드하세요.