Postgresql in freenas Jail
Существует проблема с запуском postgresql в Jail environment.
При запуске
/usr/local/etc/rc.d/postgresql initdb
оно ругается
creating template1 database in /usr/local/pgsql/data/base/1 ... FATAL: could not create shared memory segment: Function not implemented
DETAIL: Failed system call was shmget(key=1, size=1622016, 03600).
Для исправления конкретного Jail-а, надо передать этому jail-у параметр “allow.sysvipc=1”. Так, для Jail-a с номером $Jid=3, надо выполнить
jail -m jid=3 allow.sysvipc=1
Во freenas этот параметр выставляется в виде sysctl-а для соответствующего Jail-а. Надо иметь в виду, что в окне настройки Jail-a эти sysctl-ы должны перечисляться через запятую, например: allow.raw_sockets=true,allow.sysvipc=1
FreeBSD postgresql quickstart
Совсем коротко теория.
sysrc мы не рассматриваем.
Перед запуском postgresql надо создать первоначальные базы данных. Это делается командой
/usr/local/etc/rc.d/postgresql initdb
Оно же выставит владельца директории с базами и исправит права доступа.
После этого запускается postgresql командой
service postgresql start
Для работы с базами данных используется утилита psql
psql при запуске должен подключаться к какой-либо базе
При запуске initdb (/usr/local/etc/rc.d/postgresql initdb
) оно создало 3 базы:
postgres
template0
template1
Администратор баз данных должен быть непривилегированным пользователем
При установке postgresql-server оно создало непривилегированного пользователя pgsql
Если при запуске postgresql оно ругается на
pg_ctl: could not read file "/usr/local/pgsql/data/postmaster.opts"
, то запускать надо командой
/usr/local/bin/postgres -D /usr/local/pgsql/data
Таким образом, на FreeBSD для установки postgresql и корректного входа в базу “postgres” достаточно выполнения следующего набора действий:
pkg install postgresql84-server
# выставить sysrc
mkdir -p -m 0777 /usr/local/pgsql/data
/usr/local/etc/rc.d/postgresql initdb
su pgsql
/usr/local/bin/postgres -D /usr/local/pgsql/data
psql -d postgres
Сидя в pgsql-е, создать базу my_base, пользователя для этой базы my_user и войти в my_base можно командами
CREATE DATABASE my_base;
CREATE USER my_user WITH PASSWORD 'my_password';
GRANT ALL PRIVILEGES ON DATABASE my_base TO my_user;
\c my_base
Войти из шелла в базу template1 как пользователь pgsql без выполнения su pgsql
:
psql -d template1 -U pgsql
Созздать базу из шелла, а затем ее обрушить, но уже из postgresql
/usr/local/bin/createdb -U pgsql my_base
psql -d template1 -U pgsql
DROP DATABASE my_base;
\q