Получи случайную криптовалюту за регистрацию!

Postgres Guru | Базы данных

Логотип телеграм канала @pg_guru — Postgres Guru | Базы данных P
Логотип телеграм канала @pg_guru — Postgres Guru | Базы данных
Адрес канала: @pg_guru
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.01K
Описание канала:

Становимся гуру PostgreSQL вместе!
Сотрудничество: @Sferg007
Ссылка на канал: https://t.me/ NRjYf8gGR3RmYmMy
Postgres Guru в VK https://vk.com/pg_guru

Рейтинги и Отзывы

3.33

3 отзыва

Оценить канал pg_guru и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

2

2 звезд

0

1 звезд

0


Последние сообщения

2023-04-27 17:01:25 ​​ Редактор с богатым функционалом для работы с результатом запроса.

Мы уже с вами знаем как установить редактор для постраничного просмотра результата запроса в psql. И как правило, в Linux операционных системах это программа под названием less. Она конечно облегчает просмотр большого результата запроса, но не обладает возможностями по форматированию таблиц или сортировки данных в них.

По этому одним энтузиастом был разработан просмоторщик результатов запросов с удобными функциями для работы с таблицами под названием pspg.

Вот ссылка на GitHub проекта:

https://github.com/okbob/pspg

А вот видео презентации проекта:





К основным возможностям программы относятся:

возможность закрепления нескольких верхних строк или колонок для более удобного просмотра результата запроса;

возможность сортировки значений в колонках;

возможность использовать разные темы;

возможность пользоваться мышкой в редакторе;

возможность копирования диапазона значений.

Саму программу можно установить прямо из репозиториев Ubuntu:

#sudo apt-get install pspg

Дальше можно прописать pspg в файл . psqlrc в качестве просмоторщика результата запроса по умолчанию:

\setenv PAGER pspg

#pgtools
129 views14:01
Открыть/Комментировать
2023-04-27 13:01:54 ​​ Сохраняем историю запросов psql в файл.

Такое может пригодиться для дальнейшего анализа запросов, расследования инцидентов, связанных с безопасностью базы данных, или просто чтобы разобраться кто накосячил и снёс пол базы А может у вас родился какой-то гениальный запрос, который вы не можете больше повторить, а тут он в файле сохранится

Для установки файла для записи воспользуемся следующей командой psql:

\set HISTFILE ~/.psql_history- :DBNAME

HISTFILE - это переменная, которая определяет файл для истории запросов.

Если эта переменная не определена, то значение берется из переменной окружения PSQL_HISTORY. Если и эта переменная не определена, то значением по умолчанию будет ~/.psql_history - для Linux систем и APPDATA%\postgresql\psql_history - для Windows.

В нашем примере psql будет вести отдельный файл с историей команд для каждой базы данных в кластере. Мы можем вместо DBNAME указать конкретное имя базы, и тогда история будет вестись только для нее.

Также мы можем поместить данную команду в файл .psqlrc и тогда нам не придется прописывать эту команду каждый раз при запуске psql.

#psql
150 views10:01
Открыть/Комментировать
2023-04-27 09:02:12  DIY (Do It Yourself) индекс (видео).

Андрей Бородин, разработчик компании Яндекс, расскажет о так называемых DIY индексах. Это индексы, которые вы сделали своими руками.

Из доклада вы узнаете о технологии pg_am в PostgreSQL и как вы сами можете создать свой собственный индекс под свои же задачи. Узнаете как можно переделать стандартный B-tree индекс.

А самое главное, что Андрей покажет на живой сессии как можно быстро создать собственный индекс.

СМОТРЕТЬ ВИДЕО

#pgbase
156 views06:02
Открыть/Комментировать
2023-04-26 17:02:20 ​​ Логирование медленных запросов в PostgreSQL.

Медленные запросы - это несомненное зло как для базы данных так и для админа. Пользователи нервничают, а таблицы в базе распухают, так как в них не может прийти autovacuum пока они заняты запросом.

По этому надо уметь такие запросы отлавливать и устранять причину медленного выполнения.

Начнем с отлова таких запросов. Здесь нам пригодиться параметр PostgreSQL log_min_duration_statement.

Этот параметр позволяет записать в лог PostgreSQL любой запрос, который выполнялся больше заданного времени.

Для разнообразия давайте установим этот параметр через psql, а не прямым редактированием файла postgresql.conf:

ALTER DATABASE имя_базы SET log_min_duration_statement = 'время_выполнения_запроса';

Установленные таким образом параметры PostgreSQL попадают в файл postgresql.auto.conf

После этой настройки все запросы, выполняющиеся дольше время_выполнения_запроса будут попадать в лог PostgreSQL и вы сможете с ними разобраться

#pgsettings
180 views14:02
Открыть/Комментировать
2023-04-26 13:01:30 ​​ Команды управления транзакциями (SAVEPOINT).

Мы с вами уже познакомились с основными командами управления транзакциями в PostgreSQL. И знаем, что если внутри транзакции случится какая-то ошибка, то все удачно завершившиеся запросы в рамках этой транзакции откатятся назад.

Вот пример:

BEGIN; - начали транзакцию

CREATE TABLE test(id int); - создали таблицу test

SELECT * FROM does_not_exist_table; - здесь мы намерено обратились к несуществующей таблице, чтобы вызвать ошибку

ERROR: relation "does_not_exist_table" does not exist - получили ошибку

Дальше какие бы мы команды не вводили, они будут проигнорированы, так как у нас ошибка и нам надо откатить транзакцию.

ERROR: current transaction is aborted, commands ignored until end of transaction

ROLLBACK; - откатываем транзакцию

Теперь, если мы попробуем обратиться к таблице text, то мы ее не найдём, так как изменения не применились.

\d test

Did not find any relation named "test".

Но что если нам надо в целях отладки какого-нибудь запроса не откатывать все изменения в транзакции? Если мы не хотим потерять какие то данные в случае ошибки в транзакции?

В этом случае нам поможет команда SAVEPOINT. Т.е. точка сохранения. Когда мы внутри транзакции укажем точку сохранения, то транзакция в случае ошибки откатиться до этой точки.

Пример:

BEGIN; - начинаем транзакцию

CREATE TABLE test(id int); - создаем таблицу

INSERT INTO test VALUES (1); - вставляем значение в таблицу

SAVEPOINT my_point; - делаем точку сохранения. Ей нужно присвоить какое-то имя.

INSERT INTO test values (2); - вставляем еще значение в таблицу

INSERT INTO does_not_exist values (1); - вызываем ошибку, вставляя значение в несуществующую таблицу

ERROR: relation "does_not_exist" does not exist

LINE 1: insert into does_not_exist values (1);

ERROR: current transaction is aborted, commands ignored until end of transaction block

ROLLBACK to my_point; - откатываем транзакцию к точке сохранения

Теперь если мы сделаем запрос к таблице test:

SELECT * FROM test;

то увидим следующий результат:

id
---
 1
(1)

Как видно из результата, у нас осталась таблица test и первое значение. Т.е. то, что мы сделали до точки сохранения. Все остальные изменения откатились.

#queries
139 views10:01
Открыть/Комментировать
2023-04-26 09:02:09 Базовые навыки администрирования PostgreSQL (видео).

На мероприятии MoscowPython Meetup 76, которое прошло в 2021 году, Иван Терещук (mos.ru, Тимлид мобильной разработки) рассказал о базовых навыках администрирования PostgreSQL, которые должен знать Python разработчик.

Посмотрев видео вы узнаете:

Про основные средства резервного копирования PostgreSQL;

Как добавить дополнительные соединения в PostgreSQL;

Как посмотреть текущие соединения и их статус;

Что такое PgBouncer;

Основные средства мониторинга PostgreSQL;

Как найти медленные запросы;

На какие настройки PostgreSQL стоит обратить внимание в первую очередь;

Что такое взаимные блокировки и как с ним бороться;

Что такое репликация.

СМОТРЕТЬ ВИДЕО

#pgbase
151 views06:02
Открыть/Комментировать
2023-04-25 17:39:48 Полезный DNS сервис блокировки рекламы и телеметрии.

Ребята из Sys-Admin коммьюнити в прошлом году запустили бесплатный DNS сервис, который блокирует:

- телеметрию, рекламу, малварь и тп;
- не требует установки агентов;
- экономит трафик;
- работает в роутерах, браузерах, мобильных устройствах.

Проект называется Open BLD DNS, подключается легким движением мыши

Детали здесь - https://lab.sys-adm.in/ru
194 views14:39
Открыть/Комментировать
2023-04-25 17:01:46 ​​ Восстановление базы данных PostgreSQL из бэкапа (plain text).

Как делать резервные копии с помощью утилиты pg_dump мы с вами уже знаем. Даже написали полноценный скрипт резервного копирования для Linux.

Теперь давайте разберемся в том как восстанавливать резервные копии. Начнем с формата резервной копии plain text. Т.е. обычный файл, содержащий SQL команды для создания объектов в базе данных и наполнения их всей необходимой информацией.

Такой формат резервных копий можно восстановить через psql, передав ему на вход файл. Psql проиграет все SQL команды из файла и мы на выходе получим работающую базу данных, находящуюся в консистентном на момент создания бэкапа состоянии.

Учтите, что восстанавливаться надо в чистую базу данных. Если вы попытаетесь залить такой файл в существующую базу, то ни чего не получится, так как в базе начнутся конфликты существующих объектов и вновь создаваемых.

По этому, если вам нужно восстановить рабочую базу из копии (например 1с), то сначала придется удалить базу из PostgreSQL и создать пустую с таким же именем, а уже потом заливать в нее резервную копию. В случае с 1с базами данных, не удаляйте базу через консоль сервера 1с Предприятия, а удалите ее в PostgreSQL. После восстановления вам не придется заново прописывать базу в сервере 1с Предприятия, он ее подхватит по новой.

Ну а теперь собственно сам процесс восстановления. Если у вас текстовый файл бэкапа запакован каким-то архиватором, то сначала его нужно будет распаковать, например так:

# tar xvf archive.tar

Или так:

# tar xvzf archive.tar.gz

Далее передаем файл бэкапа в psql командой:

# psql -U postgres имя_базы < /путь/к/файлу/с/бэкапом

Так как восстановление из логической резервной копии само по себе не быстрое, и если у вас база данных приличного объема, то процесс восстановления может занять длительное время.

#pgbackup
160 views14:01
Открыть/Комментировать
2023-04-25 13:00:45 ​​ Полезные функции PostgreSQL (MIN () и MAX () ).

Функция MAX() в PostgreSQL используется для нахождения максимального значения в строке таблицы.

Предположим у нас есть таблица people такого вида:

I'd | name | age | address | zp
-+-----––-+--–+---------+–––––
1| Maxim |32|California|20000
2| Nastia |25| Texas |15000
3| Ilya |23| Norway |20000
4| Dima |25| Rich-Mond|65000
5| Sasha |27| Texas |85000

Давайте попробуем выяснить какая зарплата в таблице самая большая. Для этого напишем следующий запрос:

SELECT MAX(zp) FROM people;

Получим следующий результат:

max
-------
85000
(1 row)

Функция MIN(), в свою очередь, находит минимальное значение в строках таблицы.

Выясняем какая зарплата минимальная:

SELECT MIN(zp) FROM people;

Результат будет следующий:

min
-------
15000
(1 row)

Мы можем использовать эти две функции одновременно. Например так:

SELECT MIN(zp), MAX(zp) FROM people;

Результат будет следующим:

min | max
-------+-------
15000 | 85000
(1 row)

#pgfunc
154 views10:00
Открыть/Комментировать
2023-04-25 09:02:14 Готовим PostgreSQL в эпоху DevOps. Опыт 2ГИС (видео).

Павел Молявин, инженер инфраструктуры из компании 2ГИС, рассказал как они у себя в компании использовали DevOps практики для внедрения PostgreSQL.

Доклад больше обзорный, а не технический. Павел в докладе поделился своим опытом применения DevOps в развертывании PostgreSQL.

Из видео вы узнаете:

Как избежать хаоса в конфигурациях с помощь DevOps практик;

Как сделать отказоустойчивый кластер PostgreSQL;

Какой пуллер соединений лучше использовать;

Что было выбрано в качестве средства резервного копирования;

Использование Ansible для развёртывания PostgreSQL;

Что из этого всего вышло

СМОТРЕТЬ ВИДЕО

#other
149 views06:02
Открыть/Комментировать