ШПАРГАЛКИ
CI/CD
KUBERNETES
- LINUX
- GIT
- DOCKER
- DOCKERFILE
- DOCKER-COMPOSE
- DOCKERSWARM
- KUBERNETES
- ANSIBLE
- BASH
- DOCKERFILE
- DOCKER-COMPOSE
- JENKINSFILE
- JENKINS-PIPELINE
- GITLAB CI/CD
- GROOVIE
- INSTALL
- PODS
- INGRESS
Памятка по командам PostgreSQL (пополняемая)
Так как я не ДБА, то частенько забываю, как выдавать ралзичные права, создавать пользователей и так далее. Так что тут буду собирать команды SQL для облегчения жизни...
Выдать пользователю RO на базу
-- Создаем группу для RO
CREATE ROLE readonly;
-- Даём доступ к существующим таблицам
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
-- Даём доступ к будущим таблицам
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
-- Создаем пользователя с правами RO
CREATE USER пользователь WITH PASSWORD 'пароль';
GRANT readonly TO пользователь;
-- На конкретную базу
GRANT CONNECT ON DATABASE ИМЯ_БД TO пользователь;
GRANT USAGE ON SCHEMA public TO пользователь;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO пользователь;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO пользователь;
Дампим БД с исключением таблиц и восстанавливаем на другом Хосте
Сначала склонируем:
pg_dump \
--clean \
--encoding=utf8 \
--format=directory \
--jobs=5 \
--verbose \
--compress=5 \
--exclude-table=table_num_1_to_exclude \
--exclude-table=table_num_1_to_exclude \
--file=DIR_NAME \
--dbname=DB_NAME \
--host=HOST \
--port=PORT \
--username=USERNAME \
--password
Потом архивируем
tar -cvf ARCHIVE_NAME.tar.gz DIR_NAME/
rm -rf DIR_NAME/
Потом копируем на удаленный хост и разархивируем
tar -xvf ARCHIVE_NAME.tar.gz
rm ARCHIVE_NAME.tar.gz
И восстанавливаем
pg_restore \
--dbname=IMPORT_DAB_NAME \
--format=directory \
--jobs=5 \
--verbose \
--host=HOST \
--port=PORT \
--username=USERNAME \
--password \
DIR_NAME
Смотрим отставание реплик в кластере PostgreSQL + Patroni
--получить лаг в реплика
select
r.client_addr,
r.usename,
r.application_name,
r.state,
r.sync_state,
--сколько сгенерировано, но не отправлено
--если > 0, то говорит о сетевой проблеме => запусти nicstat
(pg_wal_lsn_diff(pg_current_wal_lsn(), r.sent_lsn) / 1024)::int as pending,
--сколько отправлено, но не записано
--если много, то проблема с диском -> запусти io top
(pg_wal_lsn_diff(r.sent_lsn, r.write_lsn) / 1024)::int as write,
--записано, но не было выпущено (еще в ОЗУ) не закоммичено
--если много => trouble at HDDs => запусти IO STAT || io top
(pg_wal_lsn_diff(r.write_lsn, r.flush_lsn) / 1024)::int as flush,
--данные засинканы, но не воспроизведены репликой
--если >0 => диски или цпу => запусти IO STAT || io top
(pg_wal_lsn_diff(r.flush_lsn, r.replay_lsn) / 1024)::int as replay,
--всего
((pg_wal_lsn_diff(pg_current_wal_lsn(), r.replay_lsn)) / 1024)::int as total_lag
from pg_catalog.pg_stat_replication as r