Як виправити встановлення PostgreSQL


18

Нещодавно я пройшов модернізацію від Maverick до Natty, і все пішло нормально, за винятком того, що під час dist-модернізації щось пішло не так з 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"
вільнодумник

Запуск цієї команди нічого не видає. Будь-які інші ідеї?
провідний

відкрийте /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розмір пам’яті в байтах, тобто 40 мегабайт. У виробничій системі, ймовірно, ви хочете встановити це значення вище - документація 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файл, який повинен бути використаний для цієї мети, але він, здається, не включений в основний конфігурацію, тому редагування не має ефекту)


Я зробив саме так, як ви сказали вище, і навіть перезапустив комп'ютер, але я все одно отримую таку саму помилку, яку я розмістив в оригінальному запитанні. На даний момент я готовий просто видалити всю справу і почати з нуля, але чомусь вдало намагаюся запустити сервер, коли я видаляю, і тому я навіть не можу цього зробити. Дякуємо за всю вашу допомогу! Я дійсно ціную це.
провідний

спробуйте натиснути shmmax далі .. це спільна пам'ять. Подивіться на посилання, яке я опублікував, воно містить більше інформації та більше роботи
вільнодумці

10
Рішенням було відредагувати /etc/sysctl.conf та додати рядок kernel.shmmax = 41943040, потім запустити sudo sysctl -p та перезапустити postgreSQL: start / suc /etc/init.d/postgresql. Тепер він починається без помилок. Дуже дякую!!
провідний

1
@freethinker, це не працює в 12.04.
Серін

1
@wired, Дякую, виправлення працює на мене. Здається, що /etc/sysctl.d/30-postgresql-shm.conf повністю ігнорується ...
Серін

-2

Старий Postgres все ще працює, швидше за все.

Хороша ідея, як зазначав вільнодумник, дуже чітко визначити, що працює на цьому порту.

Як тільки ви дізнаєтесь, що це Postrgres, тоді ви, ймовірно, захочете його вбити:

# Find PID
ps axf | grep post

kill PID

Тоді ви можете запустити нову версію:

/etc/init.d/postgresql start

Мені спантеличено, чому менеджер пакунків не зміг зупинити старішу версію.


Це не відображається з 'ps axf | греп-пост '. Я майже впевнений, що це не працює.
провідний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.