This commit is contained in:
2025-03-17 07:48:47 +05:00
parent a2cf9d2860
commit 04b8e941d1
7 changed files with 1317 additions and 457 deletions

299
PostgreSQL_install.md Normal file
View File

@ -0,0 +1,299 @@
# Install PostgreSQL database
Coonect lto need server:
```sh
wsl
```
Or coonect to need server:
```sh
ssh igor@ccalm.org -p 2200
```
****************************************************************************************************
Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries:
Скачал, создаю дирректорию хранения данных:
O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3
O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13
Потом создать BAT файл с тем текстом что отобразится при создании каталога базы
База данных создаётся не под пользователем postgres а под локальным пользователем igor
****************************************************************************************************
Установка PostgreSQL 14 ubuntu 22.04 или 24.04
```sh
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib -y
```
Или так если нужно установить PostGIS
```sh
sudo apt-get install postgis
```
Для удаления PostGIS в месте с зависимыми пакетами:
```sh
sudo apt-get remove --auto-remove postgis &&
sudo apt-get purge postgis
```
Добавить русскую локаль если её нет:
```sh
sudo locale-gen ru_RU &&
sudo locale-gen ru_RU.UTF-8 &&
sudo locale-gen kk_KZ &&
sudo locale-gen kk_KZ.UTF-8
```
Проверить какая локаль по умолчанию:
```sh
localectl status
```
И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):
```sh
sudo dpkg-reconfigure locales
```
Для задания пароля в PostgreSQL выполнить:
```sh
sudo -u postgres psql &&
\password postgres
```
Чтобы выйти нужно выпольнить команду: \q
Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust
Задать пароль:
sudo -u postgres psql
postgres=> SELECT usename FROM pg_user;
postgres=> alter user postgres password 'PasSecrKey1';
postgres=> \q
Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/
Создаём базу данных выполнив функцию:
CREATE DATABASE CCALM
WITH OWNER = postgres
TEMPLATE = template0
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'ru_RU.UTF-8'
LC_CTYPE = 'ru_RU.UTF-8'
CONNECTION LIMIT = -1;
Файл настроек postgresql: sudo mcedit /etc/postgresql/16/main/postgresql.conf
listen_addresses='*' #Разрешить подключение с внешки
#Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой
backslash_quote = on
escape_string_warning = off
standard_conforming_strings = off
Чтобы воводил двоичные данные по старому изменить на:
bytea_output = 'escape'
Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду"
Для создания нового пользователя выполнить:
sudo -u postgres psql
CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
Для подключения к определённой базе данных выполнить команду:
sudo -u postgres psql
\list or \l: для отображения всех баз
\connect zholak zholak
\dt для отображения всех таблиц
или написать со своим IP: host all all 2.133.238.240/24 trust
Для подключения с любых IP адресов в "sudo mcedit /etc/postgresql/16/main/pg_hba.conf" прописать:
host all all 0.0.0.0/0 md5
Либо с одного конкретного то: host all all 92.46.48.37/24 md5
А также поменять на listen_addresses = '*' в postgresql.conf
Потом перезагрузить postgres:
sudo service postgresql restart
sudo /etc/init.d/postgresql stop
sudo /etc/init.d/postgresql restart
sudo /etc/init.d/postgresql start
Проверить запущен или нет то:
sudo /etc/init.d/postgresql status
Посмотрель лог загрузки PostGreSQL:
dmesg |grep pg
Чтобы посмотреть чем занят порт выполнить команду:
sudo netstat -tap | grep 5432
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres
pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom
pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql
pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
Востановить Dump из текстового файла:
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup
psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql
psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql
psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
#!/bin/sh
pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
su - postgres
pg_restore -U <username> -d <dbname> -1 <filename>.dump
pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup
pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
sudo -u postgres psql -d transit -f /tmp/transit.backup
Или из архива (первоначально задать trust на 127.0.0.1) так:
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
****************************************************************************************************
Настройка отображения статистики для PostgreSQL:
https://habr.com/ru/articles/488968/
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
SELECT * FROM pg_stat_activity
SELECT * FROM pg_stat_replication
SELECT * FROM pg_stat_all_tables
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
****************************************************************************************************
Установка pgagent
sudo apt-get update
sudo apt-get install pgagent
Выполнить в консоли запрос:
psql -h localhost -U postgres
create extension pgagent;
\q
Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
host all all 127.0.0.1/32 md5
Можно для теста запустить pgagent с повышенным уровнем логирования:
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
Если файла нет то пытаюсь его создать:
sudo mcedit /lib/systemd/system/pgagent.service
[Unit]
Description=PostgreSQL PgAgent Service
After=network.target
[Service]
Type=simple
User=postgres
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
[Install]
WantedBy=multi-user.target
Проверяю что сервис был запущен:
sudo systemctl daemon-reload
sudo systemctl enable pgagent
sudo service pgagent start
sudo systemctl status pgagent
Для проверки пробуем подключиться к базе данных
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
\q
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
sudo -u postgres touch /var/lib/postgresql/.pgpass
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
sudo -u postgres mcedit /var/lib/postgresql/.pgpass
И прописать в него:
127.0.0.1:5432:postgres:postgres:PasSecrKey1
Где используется такой формат: hostname:port:database:username:password
Затем:
sudo systemctl enable pgagent
sudo service pgagent start
sudo service pgagent status
Посмотреть логи:
sudo journalctl -u pgagent
****************************************************************************************************
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
****************************************************************************************************
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
****************************************************************************************************
Установка PostGIS на PostgreSQL выше 9.0 версии:
sudo apt-get install postgis postgresql-9.3-postgis-2.1
Для 10й версии:
sudo apt install postgresql-10-postgis-2.4
sudo apt install postgresql-10-postgis-scripts
Для 12й версии:
sudo apt install postgresql-12-postgis-2.4
Создать базу данных и выполнть на ней следующие команды:
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- rule based standardizer
CREATE EXTENSION address_standardizer;
-- example rule data set
CREATE EXTENSION address_standardizer_data_us;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17
Аказывается расширение кудато делось установил:
sudo apt-get install postgresql-9.5-postgis-2.2
****************************************************************************************************
Для добавления TOTP авторизации в Postgresql выполнить:
CREATE EXTENSION otp;
****************************************************************************************************
sudo apt-get install libpq-dev libpq-fe
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
apt update
****************************************************************************************************
Установка phpPgAdmin через репозиторий:
sudo apt-get install phppgadmin
Можно открыть так: http://localhost/phppgadmin
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
Чтоб можно было залогинется под пользователем postgres меняем в:
/etc/phppgadmin/config.inc.php extra_login_security в false
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
****************************************************************************************************
Установка pgAdmin4 в Linux Mint 20.04 (inxi -S) Проверить версию линукса: cat /etc/os-release у меня выдало: NAME="Linux Mint" VERSION="20.3 (Una)"
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4
И не запустился сервер оболочка пытается стартануть а сервер нет...
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
sudo apt install pgadmin4
Тоже не заработал
Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/
****************************************************************************************************
Балансировщик назрузки и потоковая репликация:
Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью
https://ritorika.com.ua/dokument/6/pgpool-chto-jeto
****************************************************************************************************
Мониторинг запросов postgresql