Bug 27336

Summary: posgresql.service for postgresql
Product: Sisyphus Reporter: Igor Zubkov <icesik>
Component: postgresql9.1-serverAssignee: Denis Smirnov <mithraen>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aen, amike, amike, evg, misha, shaba, taf, vitty, vvk
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
postgresql.service
none
postgresql-chrooted.service none

Description Igor Zubkov 2012-05-14 20:39:54 MSK
Нужна нативная поддержка systemd в пакете postgresql.
Comment 1 Vitaly Kuznetsov 2012-05-15 18:53:12 MSK
http://git.altlinux.org/people/vitty/packages/postgresql9.1.git?p=postgresql9.1.git;a=commit;h=3aa59d5b519607e6c90a27c89ae0db6ef8de3a18

Если майнтейнеры postgres не против, то я готов собрать этот коммит в Сизиф.
Comment 2 Vitaly Kuznetsov 2012-05-15 19:48:20 MSK
У нас, собственно, пакеты postgresql9.0-server и postgresql9.1-server, перевешиваю на 9.1
Comment 3 Alexey Shabalin 2012-05-15 20:23:39 MSK
Created attachment 5460 [details]
postgresql.service
Comment 4 Alexey Shabalin 2012-05-15 20:24:13 MSK
Created attachment 5461 [details]
postgresql-chrooted.service
Comment 5 Alexey Shabalin 2012-05-15 20:35:46 MSK
Предлагаю два service-файла, для postgreasql в chroot и без.

to vitty: комит посмотрел:
- StandardOutput=syslog - стоит ли переопределять обще-системный? может я только journal использую
- "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю)
- а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не дадут это сделать под systemd.
Comment 6 Mike 2012-05-15 21:22:29 MSK
Сам postges не форкается, следовательно Type=forking не подходит. 
Остановка сервера, через pg_ctl тоже через посылку KILL сигнала, следовательно можно убрать эту операцию и доверить остановку самому systemd.

В общем, больше подробностей у ldv@ и vitty@, пару часов тестировали юнит и пришли к тому виду, который у vitty@.
Comment 7 Vitaly Kuznetsov 2012-05-15 22:21:16 MSK
(В ответ на комментарий №5)
> Предлагаю два service-файла, для postgreasql в chroot и без.
> 
> to vitty: комит посмотрел:
> - StandardOutput=syslog - стоит ли переопределять обще-системный? может я
> только journal использую

Да, наверное не стоит.

> - "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет
> если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю)

Я как-то не подумал о работа postgres не в chroot. Он у нас так работает?

> - а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и
> в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно
> человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql
> initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не
> дадут это сделать под systemd.

Мне показалось, что людям будет крайне неочевидно делать /etc/init.d/postgresql initdb, не догадаются (причём service postgresql initdb не сработает), поэтому я и вынес отдельный скрипт. Но я, разумеется, не настаиваю, мне просто показалось так логичнее.
Comment 8 Mike 2012-05-16 01:52:06 MSK
(В ответ на комментарий №7)
> (В ответ на комментарий №5)
> > Предлагаю два service-файла, для postgreasql в chroot и без.
> > 
> > to vitty: комит посмотрел:
> > - StandardOutput=syslog - стоит ли переопределять обще-системный? может я
> > только journal использую
> 
> Да, наверное не стоит.

Т.к. всё равно весь вывод в итоге попадёт в syslog, если он присутствует.

> > - "postgres -C $PG_CHROOT_DIR" - это только для postgresql в chroot? что будет
> > если $PG_CHROOT_DIR пустой? (я просто не знаю, поэтому и спрашиваю)
> 
> Я как-то не подумал о работа postgres не в chroot. Он у нас так работает?
> 

Вроде у нас postgres в чруте по умолчанию?
Стоит остановиться на одном варианте дистрибутивного исполнения, т.к. тем у кого postgres будет настроен по другому или выведен и чрута, есть /etc/systemd/system

Ну и для проверки чрута: ConditionDirectoryNotEmpty=

> > - а нужен ли postgresql-init-db? автоматической инициализации базы данных нет и
> > в старом postgresql(когда-то давно была,хорошо что сейчас нет). Всё равно
> > человек будет запускать initdb, поэтому можно запустить /etc/init.d/postgresql
> > initdb. У нас это сработает, а в федоре нет - там /etc/init.d/functions не
> > дадут это сделать под systemd.
> 
> Мне показалось, что людям будет крайне неочевидно делать /etc/init.d/postgresql
> initdb, не догадаются (причём service postgresql initdb не сработает), поэтому
> я и вынес отдельный скрипт. Но я, разумеется, не настаиваю, мне просто
> показалось так логичнее.

Если писать юнит для postgres, то так что бы для работы сервиса не надо было использовать части от init.
Для initdb, если хочется использовать отдельный запуск, можно отдельный юнит сделать с Requires на potgres.
Comment 9 Alexei Takaseev 2018-05-12 08:22:28 MSK
Во всех текущих ветках PG  postgresql.service в наличии.