PostgreSQL 설치를 수정하는 방법


18

최근 Maverick에서 Natty로 업그레이드했으며 dist-upgrade를 제외하고는 PostgreSQL에 문제가 발생했습니다. 그 후 'sudo apt-get purge postgresql'을 통해 다시 설치, 제거 및 제거하려고 시도했지만 여전히 내가하는 일에 관계없이 동일한 오류가 발생합니다. 아래를 참조하십시오. 업그레이드 전에 제대로 작동했습니다. 도움을 주시면 감사하겠습니다. 감사!

Setting up postgresql-common (114) ...
 * Starting PostgreSQL 8.4 database server         * The PostgreSQL server failed to start. Please check the log output:
2011-05-19 11:49:41 EDT LOG:  could not bind IPv4 socket: Address already in use
2011-05-19 11:49:41 EDT HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2011-05-19 11:49:41 EDT WARNING:  could not create listen socket for "127.0.0.1"
2011-05-19 11:49:41 EDT FATAL:  could not create shared memory segment: Invalid argument
2011-05-19 11:49:41 EDT DETAIL:  Failed system call was shmget(key=5432001, size=37879808, 03600).
2011-05-19 11:49:41 EDT 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 37879808 bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 103).
    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.

[fail]
invoke-rc.d: initscript postgresql, action "start" failed.
dpkg: error processing postgresql-common (--configure):
 subprocess installed post-installation script returned error exit status 1

"netstat -na | grep 5432"의 결과를 게시 할 수 있습니까?
freethinker

해당 명령을 실행하면 아무 것도 출력되지 않습니다. 다른 아이디어가 있습니까?
유선

/etc/init.d/postgresql과를 추가 set -x한 후 라인 #!/bin/bash과을 sudo /etc/init.d/postgresql restart출력 게시
자유 사상가

나는 set -e를 set -x로 교체했고 여기에 내가 가진 것이있다 : pastebin link
유선

답변:


29

Linux 커널에서 한 번에 할당 할 수있는 공유 메모리 청크의 최대 크기를 늘려야합니다 (SHMMAX 매개 변수라고 함).

/etc/sysctl.conf다음 줄 을 편집 하고 추가 해야합니다 .

kernel.shmmax = 41943040

(여기서 41943040메모리 크기는 바이트, 즉 40MB입니다. 프로덕션 시스템에서는이 값을 더 높게 설정하려고합니다. Postgres 설명서는 사용 가능한 메모리의 1/4로 시작하는 것이 좋습니다)

그런 다음 실행

sudo sysctl -p

postgres를 다시 시작하십시오.

또는 매개 변수 값을 편집 /etc/postgresql/<version>/main/postgresql.conf하고 줄일 수 있습니다 shared_buffers.

이것은 버그입니다. 자세한 정보는 여기

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/264336

( /etc/sysctl.d/30-postgresql-shm.conf이 목적으로 사용되어야하는 파일 도 있지만 기본 구성에 포함되지 않은 것이므로 편집해도 효과가 없습니다)


위에서 언급 한대로 정확하게 컴퓨터를 다시 시작했지만 원래 질문에 게시 한 것과 동일한 오류가 계속 발생합니다. 이 시점에서 나는 모든 것을 제거하고 처음부터 시작하려고하지만, 어떤 이유로 apt-get은 제거 할 때 서버를 실행하려고하므로 그렇게 할 수도 없습니다. 모든 도움을 주셔서 감사합니다! 정말 감사.
유선

shmmax를 추가로 충돌 시키십시오. 그것은 공유 메모리 문제입니다. 내가 게시 한 링크를보십시오. 더 많은 정보와 더 많은 해결 방법이 있습니다
freethinker

10
해결책은 /etc/sysctl.conf를 편집하고 kernel.shmmax = 41943040 행을 추가 한 다음 sudo sysctl -p를 실행하고 postgreSQL을 다시 시작하는 것입니다 : sudo /etc/init.d/postgresql start 이제 오류없이 시작됩니다. 정말 고맙습니다!!
유선

1
@freethinker, 이것은 12.04에서 작동하지 않습니다.
Cerin

1
@ 유선, 감사합니다, 당신의 수정은 나를 위해 작동합니다. /etc/sysctl.d/30-postgresql-shm.conf가 완전히 무시 된 것 같습니다 ...
Cerin

-2

오래된 Postgres가 여전히 가장 많이 실행 중입니다.

Freethinker가 지적한 것처럼, 그 포트에서 실행중인 것을 매우 잘하는 것이 좋습니다.

일단 Postrgres라는 것을 알게되면 아마도 그것을 죽이고 싶을 것입니다.

# Find PID
ps axf | grep post

kill PID

그런 다음 새 버전을 시작할 수 있습니다.

/etc/init.d/postgresql start

패키지 관리자가 이전 버전을 중지 할 수없는 이유에 대해 의아해합니다.


'ps axf |와 함께 표시되지 않습니다 | grep post '. 나는 그것이 실행되고 있지 않다고 확신한다.
유선
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.