Files
Ubuntu_docs/PostgreSQL/PostgreSQL_install.md
2025-05-22 03:49:49 +05:00

16 KiB
Raw Blame History

Install PostgreSQL database

Coonect lto need server:

wsl

Or coonect to need server:

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

	sudo apt-get update
	sudo apt-get install postgresql postgresql-contrib -y

Или так если нужно установить PostGIS

	sudo apt-get install postgis

Для удаления PostGIS в месте с зависимыми пакетами:

	sudo apt-get remove --auto-remove postgis &&
	sudo apt-get purge postgis

Добавить русскую локаль если её нет:

	sudo locale-gen ru_RU &&
	sudo locale-gen ru_RU.UTF-8 &&
	sudo locale-gen kk_KZ &&
	sudo locale-gen kk_KZ.UTF-8

Проверить какая локаль по умолчанию:

	localectl status

И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):

	sudo dpkg-reconfigure locales

Для задания пароля в PostgreSQL выполнить:

	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 -d -1 .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 pg_restore --host=127.0.0.1 --username=postgres --dbname=CCALM --verbose /tmp/CCALM.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 через докер контейнер

  sudo mkdir -p /opt/pgAdmin4 &&
  sudo chmod -R 777 /opt/pgAdmin4 &&
  sudo chown -R $USER:$USER /opt/pgAdmin4
cd /opt/pgAdmin4 &&
cat > docker-compose.yml <<'EOF'
services:
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin4
    restart: unless-stopped
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: irigm@mail.ru
      PGADMIN_DEFAULT_PASSWORD: 123456
    volumes:
      - pgadmin_data:/var/lib/pgadmin

volumes:
  pgadmin_data:
EOF

4. Запуск контейнера

  cd /opt/pgAdmin4 &&
  sudo docker compose up -d
  cd /opt/pgAdmin4 &&
  sudo docker compose down

Проверить что не записан левый репозиторий для 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