Cách sửa lỗi cài đặt PostgreSQL


18

Tôi đã nâng cấp từ Maverick lên Natty gần đây và mọi thứ đều ổn, ngoại trừ trong quá trình nâng cấp, có gì đó không ổn với PostgreQuery. Tôi đã từng thử cài đặt lại, gỡ bỏ và thậm chí xóa nó thông qua 'sudo apt-get purge postgresql' nhưng nó vẫn gặp lỗi tương tự cho dù tôi có làm gì đi nữa. Xem bên dưới. Nó đã hoạt động tốt trước khi nâng cấp. Mọi sự trợ giúp sẽ rất được trân trọng. Cảm ơn!

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

bạn có thể đăng kết quả của "netstat -na | grep 5432"
freethinker

Chạy lệnh đó không có kết quả gì. Còn ý tưởng nào khác không?
có dây

mở /etc/init.d/postgresqlvà thêm a set -xvào dòng sau #!/bin/bashvà thực hiện a sudo /etc/init.d/postgresql restartvà đăng kết quả đầu ra
freethinker

Tôi đã thay thế set -e bằng set -x và đây là những gì tôi nhận được: liên kết pastebin
có dây

Câu trả lời:


29

Bạn cần tăng kích thước tối đa của một đoạn bộ nhớ dùng chung Hạt nhân Linux cho phép phân bổ cùng một lúc (được gọi là tham số SHMMAX)

Bạn cần chỉnh sửa /etc/sysctl.confvà thêm dòng sau:

kernel.shmmax = 41943040

( 41943040kích thước của bộ nhớ tính bằng byte, tức là 40 megabyte. Trên hệ thống sản xuất, bạn có thể muốn đặt giá trị này cao hơn - Tài liệu Postgres khuyên bạn nên bắt đầu với 1/4 bộ nhớ khả dụng)

Sau đó chạy

sudo sysctl -p

và khởi động lại postgres một lần nữa.

Ngoài ra, bạn có thể chỉnh sửa /etc/postgresql/<version>/main/postgresql.confgiảm giá trị của shared_bufferstham số.

Đây là một lỗi, thông tin thêm ở đây

https://bugs.launchpad.net/ubfox/+source/linux/+orms/264336

(cũng có /etc/sysctl.d/30-postgresql-shm.conftệp được cho là được sử dụng cho mục đích này nhưng dường như nó không được bao gồm trong cấu hình chính để chỉnh sửa nó không có hiệu lực)


Tôi đã làm chính xác như bạn đã nêu ở trên và thậm chí khởi động lại máy tính, nhưng tôi vẫn nhận được chính xác lỗi như tôi đã đăng trong câu hỏi ban đầu. Tại thời điểm này, tôi sẵn sàng chỉ gỡ cài đặt toàn bộ và bắt đầu lại từ đầu, nhưng vì một số lý do, apt-get trys chạy máy chủ khi tôi gỡ cài đặt và vì vậy tôi thậm chí không thể làm điều đó. Cảm ơn tất cả sự giúp đỡ của bạn! Tôi rất trân trọng điều này.
có dây

thử va chạm shmmax hơn nữa .. đó là vấn đề bộ nhớ chia sẻ. Nhìn vào liên kết tôi đã đăng, nó có nhiều thông tin hơn và nhiều công việc hơn
freethinker

10
Giải pháp là chỉnh sửa /etc/sysctl.conf và thêm dòng kernel.shmmax = 41943040 sau đó chạy sudo sysctl -p và khởi động lại postgreQuery: sudo /etc/init.d/postgresql bắt đầu. Bây giờ nó bắt đầu mà không có lỗi. Cảm ơn bạn rất nhiều!!
có dây

1
@freethinker, Điều này không hoạt động trong 12.04.
Cerin

1
@wired, Cảm ơn, sửa chữa của bạn làm việc cho tôi. Dường như /etc/sysctl.d/30-postgresql-shm.conf hoàn toàn bị bỏ qua ...
Cerin

-2

Postgres cũ vẫn có khả năng chạy.

Ý tưởng hay, như freethinker đã chỉ ra, rất rõ những gì đang chạy trên cổng đó.

Một khi bạn biết đó là Postrgres thì có lẽ bạn sẽ muốn giết nó:

# Find PID
ps axf | grep post

kill PID

Sau đó, bạn có thể bắt đầu phiên bản mới:

/etc/init.d/postgresql start

Tôi bối rối tại sao trình quản lý gói không thể dừng phiên bản cũ hơn.


Nó không hiển thị với 'ps axf | grep bài '. Tôi khá chắc chắn rằng nó không chạy.
có dây
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.