poloniumv's

PostgreSQL после обновления ArchLinux

27 ноября 2017 г. 11:33

Очередной pacman -Syyu на этот раз прошел не столь незаметно как прежде. Отвалились все django-проектики, которые работают с postgresql. Причина проста -- несовместимость формата БД версии 9.6 (стояла прежде) с версией 10.0-1 (которая стала после обновления), о чем радостно сообщил journalctl -xe:

ноя 27 11:35:44 archlinux systemd[1]: Starting PostgreSQL database server...
-- Subject: Начинается запуск юнита postgresql.service
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Начат процесс запуска юнита postgresql.service.
ноя 27 11:35:44 archlinux postgres[17505]: An old version of the database format was found.
ноя 27 11:35:44 archlinux postgres[17505]: You need to dump and reload before using PostgreSQL 9.6.
ноя 27 11:35:44 archlinux postgres[17505]: See http://www.postgresql.org/docs/9.6/static/upgrading.html
ноя 27 11:35:44 archlinux sudo[17502]: pam_unix(sudo:session): session closed for user root
ноя 27 11:35:44 archlinux systemd[1]: postgresql.service: Control process exited, code=exited status=1
ноя 27 11:35:44 archlinux systemd[1]: postgresql.service: Failed with result 'exit-code'.
ноя 27 11:35:44 archlinux systemd[1]: Failed to start PostgreSQL database server.
-- Subject: Ошибка юнита postgresql.service
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Произошел сбой юнита postgresql.service.
--
-- Результат: RESULT.

Ну и ладно. Благо, решение уже написано в самом логе. Хорошо и то, что в AUR'е доступны и предыдущие версии postgresql. Поэтому:

yaourt -S postgresql-9.6

Пропустил предложения поправить PKGBUILD да postgresql.install -- старая версия нужна ведь только чтобы сделать дамп БД (правильно, конечно, было бы его сделать перед обновлением системы, но то такое).

После недолгой сборки и установки сделал этот самый дамп:

sudo -u postgres pg_ctl -D /var/lib/postgres/data start
sudo -u postgres pg_dumpall -f /tmp/pg_dump.sql
sudo -u postgres pg_ctl -D /var/lib/postgres/data stop

Далее грохнул теперь уже ненужный каталог:

sudo rm -rf /var/lib/postgres/data

И переустановил свежую версию postgresql:

sudo pacman -S postgresql

И, наконец, запустил новый postgresql и залил дамп обратно:

sudo systemctl start postgresql.service
sudo -u postgres psql -f /tmp/pg_dump.sql

Voila!

systemctl status postgresql.service
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2017-11-27 11:41:31 EET; 19min ago
  Process: 18393 ExecStart=/usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120 (code=exited, status=0/SUCCESS)
  Process: 18391 ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data (code=exited, status=0/SUCCESS)
 Main PID: 18396 (postgres)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/postgresql.service
           ├─18396 /usr/bin/postgres -D /var/lib/postgres/data
           ├─18398 postgres: checkpointer process
           ├─18399 postgres: writer process
           ├─18400 postgres: wal writer process
           ├─18401 postgres: autovacuum launcher process
           ├─18402 postgres: stats collector process
           └─18403 postgres: bgworker: logical replication launcher

ноя 27 11:41:31 archlinux systemd[1]: Starting PostgreSQL database server...
ноя 27 11:41:31 archlinux postgres[18393]: 2017-11-27 11:41:31.418 EET [18396] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::1" открыт порт 5432
ноя 27 11:41:31 archlinux postgres[18393]: 2017-11-27 11:41:31.419 EET [18396] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "127.0.0.1" открыт порт 5432
ноя 27 11:41:31 archlinux postgres[18393]: 2017-11-27 11:41:31.479 EET [18396] СООБЩЕНИЕ:  для приёма подключений открыт сокет Unix "/run/postgresql/.s.PGSQL.5432"
ноя 27 11:41:31 archlinux postgres[18393]: 2017-11-27 11:41:31.598 EET [18397] СООБЩЕНИЕ:  система БД была выключена: 2017-11-27 11:08:57 EET
ноя 27 11:41:31 archlinux postgres[18393]: 2017-11-27 11:41:31.634 EET [18396] СООБЩЕНИЕ:  система БД готова принимать подключения
ноя 27 11:41:31 archlinux systemd[1]: Started PostgreSQL database server.