Thank you for reading this post, don't forget to subscribe!
При возникновении сложных проблем требуется посмотреть на более детальный лог. Он, по умолчанию, не включен, так как создает очень высокую нагрузку на систему и занимает много дискового пространства. Рассмотрим его включение и средства просмотра. Предполагается, что мы работаем в системе Linux и у нас уже установлена и работает СУБД PostgreSQL
Сборка PostgreSQL
Для включения подробного лога, наша СУБД должна быть собрана с опцией debug. Посмотреть опции сборки установленного PostgreSQL можно с помощью команды pg_config. Так как она может быть установлена вне стандартного каталога для запуска, вводим:
find / -name pg_config -type f
Допустим, команда вернула:
/usr/pgsql-11/bin/pg_config
* далее, наша работа должна учитывать данный путь. Ниже по инструкции вам нужно будет менять мое значение /usr/pgsql-11/bin на свое.
Тогда запустим:
/usr/pgsql-11/bin/pg_config | grep -i debug
Если система ничего не вернула, то нам нужно пересобрать СУБД.
Для начала установим пакеты, которые нам понадобятся для сборки:
yum install centos-release-scl-rh epel-release
yum install wget systemtap-sdt-devel gcc llvm-libs llvm-toolset-7-clang-devel llvm5.0-devel libicu-devel perl-ExtUtils-Embed zlib-devel krb5-devel openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel libuuid-dev systemd-devel tcl-devel python-devel gcc-c++
Как видим, для сборки PostgreSQL требуется большое число библиотек. Чтобы не засорять систему, рекомендуется сделать сборку (configure, make) на другом компьютере или в контейнере Docker.
Смотрим версию установленного программного продукта:
psql -V
В моем примере было:
psql (PostgreSQL) 11.14
На странице ftp.postgresql.org/pub/source можно найти все версии для исходников. Мы же поступим, немного, по-другому. Создадим переменную с нашей версией:
PG_VER='11.14'
И загрузим исходник командой:
wget --no-check-certificate https://ftp.postgresql.org/pub/source/v$PG_VER/postgresql-$PG_VER.tar.gz
* если получим ошибку, вводим команду yum install wget.
Распаковываем скачанный архив:
tar zxf postgresql-*.tar.gz
Перейдем в распакованный каталог:
cd postgresql-*/
Смотрим, с какими опциями собрана наша установленная СУБД:
/usr/pgsql-11/bin/pg_config | grep -i configure
Берем полученные опции и добавляем при конфигурировании еще несколько — --enable-cassert --enable-debug:
1 |
./configure --enable-cassert --enable-debug '--enable-rpath' '--prefix=/usr/pgsql-11' '--includedir=/usr/pgsql-11/include' '--libdir=/usr/pgsql-11/lib' '--mandir=/usr/pgsql-11/share/man' '--datadir=/usr/pgsql-11/share' '--with-icu' '--with-llvm' '--with-perl' '--with-python' '--with-tcl' '--with-tclconfig=/usr/lib64' '--with-openssl' '--with-pam' '--with-gssapi' '--with-includes=/usr/include' '--with-libraries=/usr/lib64' '--enable-nls' '--enable-dtrace' '--with-uuid=e2fs' '--with-libxml' '--with-libxslt' '--with-ldap' '--with-selinux' '--with-systemd' '--with-system-tzdata=/usr/share/zoneinfo' '--sysconfdir=/etc/sysconfig/pgsql' '--docdir=/usr/pgsql-11/doc' '--htmldir=/usr/pgsql-11/doc/html' 'CFLAGS=-O2 -ggdb -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' 'LLVM_CONFIG=/usr/lib64/llvm5.0/bin/llvm-config' 'CLANG=/opt/rh/llvm-toolset-7/root/usr/bin/clang' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig' |
я добавил --enable-cassert --enable-debug и -ggdb
Остальное, это то, что выдала команда /usr/pgsql-11/bin/pg_config | grep -i configure.
Собираем пакет:
make
Выполняем установку:
make install
Еще раз проверяем:
/usr/pgsql-11/bin/pg_config | grep -i debug
Теперь система должна вернуть строку с перечнем опций.
Запуск PostgreSQL в режиме отладки
Переходим в консоль под пользователем postgres:
su - postgres
Смотрим статус работы СУБД:
/usr/pgsql-11/bin/pg_ctl status
* напомним, что путь до файла pg_ctl может быть другим. Это зависит от версии postgres и операционной системы, с которой мы работаем. Как описано в начале инструкции, найти данный файл можно командой find / -name pg_ctl -type f.
Мы увидим что-то на подобие:
/usr/pgsql-11/bin/postgres "-D" "/var/lib/pgsql/11/data/"
Нас интересует значение для опции -D — это путь к рабочему каталогу с данными базы.
Останавливаем СУБД:
/usr/pgsql-11/bin/pg_ctl stop
Теперь снова стартуем PostgreSQL, применяя команду:
/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -c start
* мы используем опции -D для указания пути до рабочего каталога и -c для указания на запуск режима отладки.
Готово. Начинаем работать с СУБД. При возникновении сбоев в рабочем каталоге мы увидим лог, в названии которого будет core, например:
ls /var/lib/pgsql/11/data/
core.19438
Имейте в виду, что данный файл очень быстро растет и если на сервере мало дискового пространства, оно быстро закончится.
Просмотреть содержимое лога можно командой:
gdb /usr/pgsql-11/bin/postmaster core.19438
* путь /usr/pgsql-11/bin также зависит от версии PostgreSQL и операционной системы. Он должен совпадать с путем, по которому мы искали pg_ctl.