apt update
apt -y install vim bash-completion wget
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
apt update
apt -y install postgresql-13 postgresql-client-13
psql -U postgres
ALTER USER postgres PASSWORD 'postgres';
track planning and execution statistics of all SQL statements executed
SELECT * FROM pg_available_extensions
WHERE name = 'pg_stat_statements' AND
installed_version IS NOT NULL;
Если результат запроса - пустая таблица, то надо исполнить:
CREATE EXTENSION pg_stat_statements;
text similarity measurement and index searching based on trigrams
SELECT * FROM pg_available_extensions
WHERE name = 'pg_trgm' AND
installed_version IS NOT NULL;
Если результат запроса - пустая таблица, то надо исполнить:
CREATE EXTENSION pg_trgm;
connect to other PostgreSQL databases from within a database
Необходимо ставить в каждую бд Может быть только один такой запрос к одной бд
SELECT * FROM pg_available_extensions
WHERE name = 'dblink' AND
installed_version IS NOT NULL;
Если результат запроса - пустая таблица, то надо исполнить:
CREATE EXTENSION dblink;
Пример использования:
SELECT
table_1.id,
table_1.title,
t.title
FROM table_1
LEFT JOIN (
SELECT * FROM dblink(
'dbname=database_2',
'
SELECT
table_2.id,
table_2.title
FROM table_2
'
) AS t(id uuid, title varchar)
) AS t
ON t.id = table_1.id
Рассчитать настройки используя pgtune и вставить в файл 02-postgresql/conf/custom.conf
- Конфиг для ресурсов. Скопировать
02-postgresql/conf/custom.conf
в/etc/postgresql/13/main/conf.d
- Конфиг для аналитики. Скопировать
02-postgresql/conf/statements.conf
в/etc/postgresql/13/main/conf.d
- Конфиг для таймзоны. Скопировать
02-postgresql/conf/time.conf
в/etc/postgresql/13/main/conf.d
- Конфиг для журналов. Скопировать
02-postgresql/conf/wal.conf
в/etc/postgresql/13/main/conf.d
Надо удостовериться что создаваемые БД будут в кодировке UTF-8
, для этого достаточно зайти в постгрес и посмотреть список БД и их кодировки
su - postgres
psql -U postgres
\l
Если у БД с названиями template0
и template1
кодировка UTF-8
, то все ок, а если нет, то надо её изменить следующим образом
update pg_database set datallowconn = TRUE where datname = 'template0';
update pg_database set datistemplate = FALSE where datname = 'template1';
drop database template1;
create database template1 with template = template0 encoding = 'UTF8' lc_ctype = 'en_US.UTF-8' lc_collate = 'en_US.UTF-8';
update pg_database set datistemplate = TRUE where datname = 'template1';
update pg_database set datallowconn = FALSE where datname = 'template0';
Способ требует переустановки PostgreSQL
список доступных локалей:
locale -a
отредактировать nano /etc/default/locale
:
LANG="en_US.utf8"
LANGUAGE="en_US.utf8"
LC_ALL="en_US.utf8"
перезапустить сервер:
reboot
удалить PostgreSQL:
apt -y remove postgresql-13 postgresql-client-13
apt -y purge postgresql-13 postgresql-client-13
вернутся к пункту с установкой.
В конфигах для постгреса указано, что таймзона должна быть UTC
, но это может оверрайдиться таймзоной системы и её возможно так же нужно изменить на UTC
, после чего перезапустить сервер
cp /usr/share/zoneinfo/UTC /etc/localtime
перезапустить сервер:
reboot
Скопировать скрипт для создания бэкапа 02-postgresql/scripts/clean-pg_wal.sh
в /var/lib/postgresql/clean-pg_wal.sh
Скриптам необходимо выдать права на запуск
chmod +x /var/lib/postgresql/clean-pg_wal.sh
Пример запуска:
/var/lib/postgresql/clean-pg_wal.sh -p /var/lib/postgresql/13/main/pg_wal -a ${DAYS_COUNT} -d
Эта команда выведет информацию о кластере:
/usr/lib/postgresql/13/bin/pg_controldata -D /var/lib/postgresql/13/main
Пример вывода:
Номер версии pg_control: 1300
Номер версии каталога: 202007201
Идентификатор системы баз данных: 7212239371412468712
Состояние кластера БД: в работе
Последнее обновление pg_control: Вт 11 апр 2023 11:34:51
Положение последней конт. точки: 0/609DD00
Положение REDO последней конт. точки: 0/609DCC8
Файл WAL c REDO последней к. т.: 000000010000000000000006
...
В поле Файл WAL c REDO последней к. т.:
значение текущего WAL .
Далее используя команду можно удалить все WAL, кроме текущего:
/usr/lib/postgresql/13/bin/pg_archivecleanup -d /var/lib/postgresql/13/main/pg_wal/ ${WAL_HASH}
Обновить конфиги постгреса
/usr/lib/postgresql/13/bin/pg_ctl reload -D /var/lib/postgresql/13/main
В /var/lib/postgresql/13/main/postgresql.auto.conf
могут быть команды на restore_command
. Они могут не переопределиться - надо удалить вручную перед восстановлением.