В этой ветке будем публиковать мануалы и рецепты по работе с PostgreSQL в Kali Linux
Начать знакомство с администрирования PostgreSQL рекомендуется с «PostgreSQL в Linux: рецепты популярных действий и решения проблем». Там уже собраны актуальные инструкции для частых задач и, самое главное, частые ошибки и как их исправить.
Перевод опфициальной документации от авторов PostgreSQL на русском вы найдёте в разделе Настройка баз данных PostgreSQL из статьи «Настройка и запуск сетевых служб в Kali Linux (Apache, MySQL, SSH, PostgreSQL, NetworkManager и Bluetooth)»
Обновление PostgreSQL в Kali Linux
При обновлении пакетов в Kali Linux было показано следующее сообщение:
Configuring postgresql-common Obsolete major version 13 The PostgreSQL version 13 is obsolete, but the server or client packages are still installed. Please install the latest packages (postgresql-14 and postgresql-client-14) and upgrade the existing clusters with pg_upgradecluster (see manpage). Please be aware that the installation of postgresql-14 will automatically create a default cluster 14/main. If you want to upgrade the 13/main cluster, you need to remove the already existing 14 cluster (pg_dropcluster --stop 14 main, see manpage for details). The old server and client packages are no longer supported. After the existing clusters are upgraded, the postgresql-13 and postgresql-client-13 packages should be removed. Please see /usr/share/doc/postgresql-common/README.Debian.gz for details.
Всё в лучших традициях официальных предупреждений: читайте справку и что-то делайте.
По факту после данного обновления мы имеем в системе 2 установленные версии PostgreSQL:
- postgresql-13
- postgresql-14
Если запустить службу PostgreSQL командой:
sudo systemctl start postgresql
И проверить версию командой:
sudo -u postgres psql postgres -c 'SELECT version()' | grep PostgreSQL
То будет выведено следующее:
PostgreSQL 13.4 (Debian 13.4-3) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.3.0-8) 10.3.0, 64-bit
То есть по умолчанию используется 13, устаревшая версия.
Удаление старых версий пакетов, например, командой:
sudo apt remove postgresql-13 postgresql-client-13
ситуацию не меняет. Если вам нужно перенести базы данных из устаревшей версии в новую, то верните устаревшие пакеты, если вы успели их удалить.
Последующие действия подразумевают, что вы
1) установили новую версию PostgreSQL, но ещё не использовали её, то есть не сохраняли базы данных, поскольку файлы новой версии будут удалены.
2) хотите перенести старые база данных в новый формат
С помощью следующей команды просмотрите доступные кластеры:
pg_lsclusters
На скриншоте только один из них online (я успел удалить пакет postgresql-13), но у вас оба должны быть online, иначе перенос базы данных не удастся.
Пример правильного вывода:
Ver Cluster Port Status Owner Data directory Log file 13 main 5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log 14 main 5433 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log
Как можно увидеть, обе версии 13 и 14 в настоящее время установлены и запущены. Держите в уме, что при переносе старой базы данных в новый формат вам понадобиться двойной объём места на диске, поскольку pg_upgradecluster копирует данные.
Процедура обновления включает в себя следующее:
1. Удаляем данные новой версии:
sudo pg_dropcluster --stop 14 main
2. Запускаем процедуру обновления кластера:
sudo pg_upgradecluster 13 main
3. Когда операция будет завершена, дважды проверьте, что всё работает
4. Удалите старую версию
sudo pg_dropcluster --stop 13 main
Это показывает суть обновления кластера. Конечно, в конкретной вашей ситуации могут быть нюансы: другие номера версий, либо другое расположение файлов с базами данных.
Вновь проверяем версию:
sudo -u postgres pg_upgrade -b /opt/pgsql-13/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
Теперь используется 14, то есть самая последняя версия.
Как инициализировать базу данных PostgreSQL в Kali Linux
Предыдущее сообщение показывает, как перенести старую базу данных в новый формат. Если вы не использовали старую базу данных и хотите начать использовать последнюю версию PostgreSQL, то можно удалить предыдущую версию пакета и выполнить инициализацию новой базы данных.
Удаление предыдущей версии (конкретный номер в вашем случае может быть другим):
sudo systemctl stop postgresql.service sudo pg_dropcluster --stop 13 main sudo apt remove postgresql-13 postgresql-client-13
Директория /var/lib/postgres/ должна принадлежать пользователю postgres:
sudo chown -R postgres:postgres /var/lib/postgres/
Смените пользователя на postgres:
sudo -i -u postgres
Выполните инициализацию БД:
initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
Если вы столкнулись с ошибкой:
initdb: command not found
То найдите расположение файла initdb:
locate initdb
И укажите до него полный путь в команде инициализации:
/usr/lib/postgresql/14/bin/initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
Нажмите CTRL+D
Запустите службу PostgreSQL:
sudo systemctl start postgresql.service