Не могу инициализировать БД

Здраствуйте.

Я поставил PostgreSQL 8.2.4 на Fedora Core 9. Захожу root'ом в систему и пишу в терминале
 LANG=ru_RU.utf-8 /etc/init.d/postgresql start
Появляется сообщение

 [root@localhost ~]# /etc/init.d/postgresql start
/var/lib/pgsql/DATA IS missing. USE "service postgresql initdb" TO initialize the cluster first.

Подумав, решил инициализировать БД "вручную"
 LANG=ru_RU.utf-8 /etc/init.d/postgresql initdb "/var/lib/pgsql/data"
На что Fedora выдала следующее

 LANG=ru_RU.utf.8 /etc/init.d/postgresql initdb "/var/lib/pgsql/data"
Инициализируется база данных:                              [ СБОЙ ] 

В файле /var/lib/pgsql/pgstartup.log ничего нет. В смысле пусто, его размер равен 0

Подскажите, что мне делать дальше.

Заранее спасибо.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

У меня: # service

У меня:

# service postgresql start
/var/lib/pgsql/DATA IS missing. USE "service postgresql initdb" TO initialize the cluster first.
                                                           [ СБОЙ ]
[root@vislobokov Загрузки]# service postgresql initdb
[root@vislobokov Загрузки]# :                              [  OK  ]
[root@vislobokov Загрузки]# service postgresql start
Запускается служба postgresql:                             [  OK  ]

Возможно это важно: у меня selinux выключен!

Попробуйте удалить /var/lib/pgsql, затем удалить и поставить пакеты сервера заново и выполнить всё повторно.

SElinux

SElinux выключен.

Переустановить Postgre, конечно, попробую. Но не спортивно это как-то, имхо...

Переустановил Postgree.
Запускаю service postgresql initdb
Вылетает с ошибкой. В файле /var/lib/pgsql/pgstartup.log записано:

The DATABASE cluster will be initialized WITH locale en_US.UTF-8.
The DEFAULT DATABASE encoding has accordingly been SET TO UTF8.
 
fixing permissions ON existing directory /var/lib/pgsql/DATA ... ok
creating subdirectories ... ok
selecting DEFAULT max_connections ... 100
selecting DEFAULT shared_buffers/max_fsm_pages ... 24MB/153600
creating configuration files ... ok
creating template1 DATABASE IN /var/lib/pgsql/DATA/base/1 ... FATAL:  could NOT CREATE shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(KEY=1, size=35004416, 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 35004416 bytes), reduce PostgreSQL's shared_buffers parameter (currently 3456) and/or its max_connections parameter (currently 100).
        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 "/var/lib/pgsql/data"

Что делать? Help???

Ядро собирали

Ядро собирали сами или из дистрибутива?
Меняли что-либо в конфигурации postgresql?
Сколько оперативки у машины?
Сообщение говорит о том, что не хватает памяти. Причём shared памяти.

Скачал

Скачал дистрибутив с оффсайта Fedora.
В postgree ничего не менял. Ставлю конфигурацию для 1С
У машины 2 гига оперативки

Как увеличить shared memory? Postgre не хватает 2 гигов... я в шоке. Может имеет смысл поставить оригинальный Postgree, а потом его пропатчить для 1С (тогда возникает вопрос как его патчить?..)?

Не спешите быть

Не спешите быть в шоке :)

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.

После ваших данных я начинаю трактовать это сообщение по-другому. А именно - PostgreSQL хочет забрать под себя больше памяти чем указано в ядре в shmmax.

Посмотрите:
# sysctl -a|grep shmmax

у меня показывает
kernel.shmmax = 33554432

Что показывает у вас? Попробуйте увеличить с помощью:
# sysctl kernel.shmmax=ЗНАЧЕНИЕ

посмотрите что вам скажет снова при попытке запуска! Экспериментируйте!

Увеличил

Увеличил kernel.shmmax до 40000000 и... заработало!!!
Правда заработало только до перезагрузки. :( После перезагрузки kernel.shmmax опять становится равен 33554432

Большое спасибо за помощь.

P.S. Буду признателен, если подскажите как задать значенияkernel.shmmax и kernel.shmmin "навсегда" ;)

Есть такой файл

Есть такой файл /etc/sysctl.conf
Необходимо внести kernel.shmmax и новое значение туда.
Система при загрузке использует все настройки оттуда.

Помогло

Postgre запускается и из виндового pgAdmin'а к нему можно подсоединиться

Но теперь возникла другая проблема. При попытки создать БД с помощью 1С'овской консоли управления серверами 1С Предприятия появляется сообщение об ошибке:
"Ошибка создания информационной базы: Ошибка информационной базы. Ошибка при выполнении операций с информационной базой. Ошибка СУБД: DATABASE не пригоден для использования"

У меня также поднят виндовый Рostgre, для тестов и сравнений с иксовым (его установка - это тоже песня, но для нее я создам другое обсуждение :) ) В виндовом Postgre база создается. Программисты говорят, что это проблема Postgre...

Может подскажите что-нибудь?

Я не работал со

Я не работал со связкой 1C + PostgreSQL, но слышал, что для работы с 1С нужен ПАТЧЕНЫЙ PostgreSQL.
Вполне возможно дело в этом.

Если и в Windows непатченый PostgreSQL,то наверное нужно копать в сторону прав доступа - имеет ли пользователь, который хочет создать базу 1C все необходимые права для этого?

Также полезно включить логгирование по максимуму и смотреть что пишется в логи.

Postgre патченный,

Postgre патченный, якобы. Виндовый тоже, вроде, патченный

Создаю базу от имени пользователя postgres, созданного при установки Postgre и являющегося суперюзером в Postgre

Логирование в Postgre включу, когда разберусь как это сделать :)

В Linux

В Linux пользователь postgres по умолчанию прописан с авторизацией по ident
Это значит, что этот пользователь может работать ТОЛЬКО с локахоста, если в системе сделать предварительно от root'а:
# su - postgres

В остальных случаях доступ ему запрещён. Проверьте, может быть дело в этом.

Как сменить

Как сменить авторизацию, чтобы пользователь мог работать НЕ ТОЛЬКО с локалхоста?

Если Вы имеете в виду авторизацию в Postgre, то я поправил файлик pg_hba.conf, разрешив авторизацию MD5 из сети и локалхоста.

Насчёт md5 я

Насчёт md5 я точно не помню. Я делал passwd авторизацию в pg_hba.conf после чего надо зайти postgres с локалхоста и выполнить команду ALTER USER для пользователя postgres назначив ему пароль.

Не важно password

Не важно password или md5 проблема не в этом.

При создании базы данных из оснастки "Сервера 1С Предприятия" вылетает вот такое сообщение:

Ошибка создания информационной базы: ошибка информационной базы. Ошибка при выполнении операций с информационной базой. Ошибка СУБД: ERROR: could NOT LOAD library "/usr/lib/pgsql/mchar.so": libicudata.so.34: cannot enable executable stack AS shared object requires: Permission denied

Все библиотеки есть! Проверял. И доступы на них стоят -rwxr-xr-x, как и на других библиотеках. Ставил права -rwxr-xrwx - не помогло :(
При этом база создается, но при попытки обратиться к ней 1С пишет, что база повреждена.

Я включил подробное протоколирование в Postgre. Вот кусок лога, в котором возникает ошибка:

 	 CREATE OPERATOR CLASS mvarchar_fill_ops
	  FOR TYPE mvarchar USING hash AS
	     OPERATOR    1   ==,
	     FUNCTION    1   fullhash_mvarchar(mvarchar);
 
	 CREATE OR REPLACE FUNCTION fasttruncate(text)
	 RETURNS void AS '$libdir/fasttrun'
	 LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
 
NOTICE:  type "mchar" IS NOT yet defined
DETAIL:  Creating a shell type definition.
ERROR:  could NOT LOAD library "/usr/lib/pgsql/mchar.so": libicudata.so.34: cannot enable executable stack AS shared object requires: Permission denied
STATEMENT:   CREATE FUNCTION mchar_in(cstring)
	 RETURNS mchar
	 AS '$libdir/mchar'
	 LANGUAGE C IMMUTABLE RETURNS NULL ON NULL INPUT; 

Вот теперь я точно в шоке. Два дня мучений и все напрасно :(

Судя по мессаге

Судя по мессаге - не объявлен тип mchar
Чтобы этот самый mchar объявить надо либу которая данный тип поддерживает.
mchar.so в состав стандартного PostgreSQL не входит - верно?
Это наверное как раз патченая для 1С часть. Либо патч кривой, ибо есть ещё одна идея, что данная либа требует использяемого стека, а он запрещён в ядре. SElinux точно выключен?

А шокироваться надо от 1C - не могли НОРМАЛЬНУЮ поддержку сделать PostgreSQL и теперь все мучаются от их кривых патчей.

SElinux

SElinux выключен

По крайней мере в /etc/selinux/config прописано SELINUX=disable
Если либа требует используемого стека, то как его разрешить в ядре?

mchar.so, не входит в стандартный Postgre - это есть факт. Я поставил postgresql-contrib, как советую умные дядечки на форумах. Этот пакет как раз и нужен для решения проблем с mchar.so...

От 1С я уже давно не шокируюсь - привык к их закидонам.

Я посмотрел, у

Я посмотрел, у меня в contrib нет mchar.so
По дефлолту, исполняемый стек в ядре разрешён. Его как раз может запрещать SELinux, поэтому и спросил.
10 минут поиска в Гугле дали результат.
1. Рекомендую полезную статью:
http://guru.multimedia.cx/pt_gnu_stack/
2. Далее прокурить man на execstack, и попробовать применить на практике.
Если получится - не забудьте отписать! :)

Также может оказаться полезным и эта мессага:
http://www.ussg.iu.edu/hypermail/linux/kernel/0406.0/0611.html

Кстати вдогонку по материалам этой статьи, попробуйте сделать:
kernel.exec-shield = 0
в /etc/sysctl.conf
и перезагрузить машину с PostgreSQL.

Со стеком

Со стеком разобрался.
Помогло kernel.exec-shield = 0
И то, что для отключения SElinux не достаточно написать SELINUX=disable. Надо еще в гуе SElinux сказать, что Enforcing mode должен быть Disable (какое изменение в конфигурационных файлах вызывает установка этого параметра в гуе я не нашел:( )

Теперь при создании базы ругается по другому:
Ошибка создания информационной базы: ошибка информационной базы. Ошибка при выполнении операций с информационной базой. Ошибка СУБД: ERROR: could NOT LOAD library "/usr/lib/pgsql/mchar.so": libicudata.so.34: cannot open shared object file: No such file OR directory

Только не понятно, почему система не находит библиотеки. В каталоге /usr/lib/pgsql/ есть файлы mchar.so и libicudata.so.34. Видимо, они какие-то "неправильные": версия не та или они не пропатчены под 1С...

Для отключения

Для отключения SELinux достаточно записать в /etc/selinux/config строки SELINUX=disabled и перегрузится. Ничего больше в гуе делать не надо.

Вопрос к вам - откуда взяты mchar.so и libicudata.so? Ну и лишний раз проверить - если ли права на чтение для пользователя postgres у этих файлов?

ЗАРАБОТАЛО!!! Ка

ЗАРАБОТАЛО!!!

Каюсь, я накосячил.
Инициализировал базу в английской локале.
Убив старые настройки Postgre и переинициализировав базу командой
 su - postgres -c 'LANG=ru_RU.UTF-8 initdb /var/lib/pgsql/data'
я получил работоспособную систему.

Спасибо за помощь и терпение.

P.S. Запись SELINUX=disabled в /etc/selinux/config не до конца отключает SElinux. Проверил. В гуе поставил Enforcing mode = Enable, но в файле /etc/selinux/config оставил SELINUX=disabled. Перезагрузил и... при создании базы система стала ругаться на стек. Вернул натройки гуя назад, перезагрузил и все заработало. Шайтан, однако.

Вы не

Вы не поняли.
Исполняемым стеком можно рулить через SELinux, если он включен, а если SELinux выключен то, через ту опцию shield о которой я писал ранее.

SELINUX=disabled совершенно точно полностью отключает SELinux. У меня например GUI после этого не даёт выбрать ни одной опции управления SELinux, пока я не включу SELinux и не перегружу машину.

Эх! Ещё бы вы взялись и написали статейку с подробным рецептом по шагам как всё это заставить работать "с нуля". Может возьмётесь? :)

Напишу

Скорее всего, напишу. Потому что буду писать мануал для себя и коллег в конторе. Этот мануал я повешу здесь. Заодно про пляски с бубном вокруг виндовой версии туда засуну.

Хорошо, буду

Хорошо, буду ждать!

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023