Популярные сообщения

вторник, 25 марта 2025 г.

Установка расширения pgsentinel

 Рассмотрим установку расширения на примере pgsentinel

pgsentinel – хранение истории активных сессий

Расширение pgsentinel предоставляет возможность собирать и просматривать историю активных сессий в PostgreSQL.

Требуется установленная версия PostgreSQL  не ниже PostgreSQL 9.6  или выше.
Перед сборкой убедится что есть:

  •  PostgreSQL version is 9.6 или выше.
  •  Установлен пакет разработки PostgreSQL(postgresql(номер версии)-devel)(gcc,llvm,clang  ) или собран PostgreSQL из исходников(у нас из снепшота в 12.1 уже все стоит, можно ничего не ставить)
    Если это не 12.1 из снепшотов , то каких пакетов не хватает в конкретном случае, можно узнать из сообщений об ошибках при компиляции.
  • Переменная PATH настроена таким образом, что команда pg_config доступна и запускается. (у нас запускается в 12.1) (команду можно запустить для проверки она безопасная)


Типичная установка для 12.1
Поскольку pgsentinel использует расширение pg_stat_statements (официально связанное с PostgreSQL) для отслеживания того, какие запросы выполняются в  базе данных, нужно добавить следующие записи в postgresql.conf:

$ shared_preload_libraries = 'pg_stat_statements,pgsentinel'
$ # Icncrease the max size of the query strings Postgres records
$ track_activity_query_size = 2048 -- можно больше если запросы очень большие
$ # Track statements generated by stored procedures as well
$ pg_stat_statements.track = all

После добавления этих строк нужно перезапустить экземпляр бд.
Важно: Лучше конечно pg_stat_statements,pgsentinel ставить до запуска прода в эксплуатацию, но если забыли то лучше сделать после 18-00 по согласованию с командой продукта.

После того, как экземпляр БД перезапущен
Создаем в /u01/postgres директорию external_extensions
владелец директории и все что внутри postgres

В эту директорию (external_extensions) закидываем  архив с расширением скачать можно тут → https://github.com/pgsentinel/pgsentinel
и разархивируем 


unzip pgsentinel-master.zip

Далее

$ cd pgsentinel/src
$ make
$ sudo make install

После чего можно уже создать расширение:
Коннект в БД
\c имя_БД

create extension pg_stat_statements;
create extension pgsentinel;

Проверить можно так:
Коннект в нужную бд и выполняем

\dx

Установка расширения oracle_fdw

 Сборку расширения, нужно повторить как на основной базе так и стендбае.


Ссылки для скачивания
https://www.oracle.com/cis/database/technologies/instant-client/linux-x86-64-downloads.html
https://github.com/laurenz/oracle_fdw

В некоторых минорных релизах PostgreSQL могут не работать некоторые версии oracle_fdw.
Или брать версию младше oracle_fdw или поднимать PostgreSQL если это возможно и РК поддерживает эту версию.

Из под root

EDITOR=vim visudo
и добавляем в конец
postgres  ALL=(ALL:ALL) NOPASSWD:ALL


Из под root

mkdir -p /opt/oracle/
chown postgres:postgres /opt/oracle/

Из под postgres

Кладем в /opt/oracle/

instantclient-basic-linux.x64-19.20.0.0.0dbru.zip
instantclient-sdk-linux.x64-19.20.0.0.0dbru.zip

unzip instantclient-basic-linux.x64-19.20.0.0.0dbru.zip
unzip instantclient-sdk-linux.x64-19.20.0.0.0dbru.zip

в /opt/postgres/14.5/distr кладем oracle_fdw-ORACLE_FDW_2_4_0.tar.gz

tar -zxvf oracle_fdw-ORACLE_FDW_2_4_0.tar.gz
cp -r oracle_fdw-ORACLE_FDW_2_4_0 postgresql-14.5/contrib/
cd /opt/postgres/14.5/distr/postgresql-14.5/contrib/oracle_fdw-ORACLE_FDW_2_4_0
sudo sh -c "echo /opt/oracle/instantclient_19_20 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig


из под postgres

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_20:$LD_LIBRARY_PATH
export PATH=/opt/oracle/instantclient_19_20:$PATH
export ORACLE_HOME=/opt/oracle/instantclient_19_20
chown -R postgres:postgres /opt/postgres/14.5/

Находясь в /opt/postgres/14.5/distr/postgresql-14.5/contrib/oracle_fdw-ORACLE_FDW_2_4_0
делаем

make
make install

Должно собраться без ошибок.

Далее в psql

Сначала создаем в postgres базе
postgres@postgres=# create extension oracle_fdw;
А потом в той которой надо
postgres@postgres=# \c ms
You are now connected to database "ms" as user "postgres".
postgres@ms=# create extension oracle_fdw;
LOG: statement: create extension oracle_fdw;
CREATE EXTENSION
Time: 52,661 ms