- СУБД Postgres Pro
- Postgres Pro доверяют
- Планы развития
- Поддержка и эксплуатация СУБД
- Наши партнеры
- Пресс-центр
- Текущая версия
- Обзор
- Миграция на версию 13.4.1
- Закажите тестирование СУБД Postgres Pro или попробуйте сами!
- Курс молодого бойца PostgreSQL
- 1. Использование временных таблиц
- 2. Часто используемый сокращенный синтаксис Postgres
- 3. Общие табличные выражения (CTE). Конструкция WITH
- 4. Функция array_agg(MyColumn).
- 5. Ключевое слово RETURNIG *
- 6. Сохранение результата запроса в файл
- 7. Выполнение запроса на другой базе
- 8. Функция similarity
- 9. Оконные функции OVER() (PARTITION BY __ ORDER BY __ )
- 10. Множественный шаблон для LIKE
- 11. Несколько полезных функций
- 12. Экранирование символов
- Заключение
СУБД Postgres Pro
Наиболее динамично развивающаяся универсальная система управления базами данных в России.
- Полностью российская: входит в Единый реестр, имеет сертификат ФСТЭК.
- Проверена крупными предприятиями: ФНС, МинФин, Газпромнефть и др.
- Разработана на платформе наиболее востребованной открытой СУБД PostgreSQL.
- Интегрирована с облаками, интернетом вещей, блокчейн, искусственным интеллектом.
Postgres Pro доверяют
Владимир Рябчиков
Генеральный директор ООО «НЦПР»
Налаживание сотрудничества с Postgres Professional является для нас очередным важным шагом в продвижении на российском рынке широкого спектра сертифицированных системных программных продуктов с учетом требований заказчиков и действующего законодательства в области защиты информации.
Кирилл Меньшов
Директор по информационным технологиям банка «Открытие»
PostgreSQL за время использования в банке зарекомендовал себя как зрелое промышленное решение, позволяющее существенно снизить лицензионные расходы и затраты на техническую поддержку баз данных без снижения качества.
Михаил Македонский
Генеральный директор Аплана.ЦР
Сотрудничество с Postgres Professional позволит обеспечить наших заказчиков эффективным прикладным ПО на основе российской СУБД Postgres Pro, включенной в реестр отечественного программного обеспечения.
ПРОИЗВОДИТЕЛЬНОСТЬ
БЕЗОПАСНОСТЬ
НАДЕЖНОСТЬ
УДОБСТВО ЭКСПЛУАТАЦИИ
Планы развития
Компания Postgres Pro ставит целью создание интеллектуальной облачной СУБД для больших данных, для чего ведет исследования в прорывных областях.
СУБД Postgres Pro уже обладает рядом возможностей, воcтребованных в эпоху Индустрии 4.0.
Искусственный интеллект
Адаптивная оптимизация запросов на базе технологий искусственного интеллекта существенно повышает производительность и автономность СУБД.
Доступность в облаках
Созданы версии СУБД Postgres Pro, адаптированные для использования в облачной инфраструктуре: Alibaba, MS Azure, Google Cloud, Mail.RU Cloud. В ближайшее время будут добавлены Яндекс.Облако и Amazon Web Services.
Интеграция с блокчейном
Доступно расширение для интеграции Postgres с Ethereum. Разрабатывается система распределенного подтверждения транзакций через Blockchain.
Интернет вещей
Разрабатывается высокопроизводительное промежуточное хранилище для IoT.
Поддержка и эксплуатация СУБД
Доверьте заботу о СУБД профессионалам.
Мы предлагаем полный спектр услуг в области управления базами данных на основе Postgres.
Техническая поддержка 24х7
Техническая поддержка администраторов СУБД в режиме 24х7. Мониторинг, восстановление работоспособности, анализ непредвиденных обстоятельств, повышение производительности, экстренное исправление ошибок и выпуск багфиксов.
Аудит СУБД
Проведем аудит СУБД, выясним причины сбоев и найдем возможность повысить производительность. Дадим экспертные рекомендации по настройке системы и оптимизации параметров СУБД.
Помощь в миграции на СУБД Postgres
Опытные инженеры окажут поддержку или проведут полную миграцию на СУБД Postgres прикладных систем, в том числе, действующих под нагрузкой. С нами процесс миграции пройдет быстрее и спокойнее.
Обучение и сертификация
Мы разработали авторские учебные курсы и пособия по различным аспектам работы с Postgres. Проводим сертификацию специалистов. Организуем обучающие семинары и сессии вопросов-ответов для заказчиков. Выступаем организатором крупнейшей в мире конференции по Postgres PGConf.Russia, а также технических митапов.
Консультации
Поможем разобраться в вопросах использования СУБД в промышленных системах, проектирования баз данных, построения высокопроизводительных и отказоустойчивых архитектур.
Профессиональная разработка СУБД
Только у нас работают ключевые российские разработчики ядра PostgreSQL с международным статусом major contributor и committer и с опытом в разработке СУБД более 20 лет.
Наши партнеры
В числе партнеров Postgres Pro свыше 50 компаний, включая технологических партнеров, дистрибьюторов и интеграторов.
Пресс-центр
Конференция PGConf.Russia 2021 приглашает участников и докладчиков!
Конференция пройдет 25 и 26 октября 2021 года на новой для себя площадке &nda…
ФСО вопреки традициям покупает Postgres Pro вместо Oracle
Вместо традиционной СУБД Oracle Database Служба специа…
Postgres Professional и DZ Systems объявили о совместимости своих продуктов
Российские разработчики программного обеспечения ГК DZ Systems и компания Pos…
Система управления базами данных Postgres Pro Enterprise для высоконагруженных систем. Выдерживает нагрузку 1 млн. транзакций в секунду при размере базы данных 150 ТБ.
Текущая версия
Последняя версия Postgres Pro Standard 13.4.1 выпущена
26 августа
Обзор
Этот выпуск основан на PostgreSQL 13.4 и Postgres Pro Standard 13.3.1. Все усовершенствования, унаследованные от PostgreSQL 13.4, перечислены в Замечаниях к выпуску PostgreSQL 13.4. Другие важные изменения и улучшения перечислены ниже:
Добавлена поддержка ОС Debian 11.
Приложение mamonsu обновлено до версии 3.0, которая несовместима с предыдущей. Прежде чем перейти к использованию данной версии, ознакомьтесь с Замечаниями о совместимости mamonsu .
Добавлена поддержка РЕД ОС 7.3 МУРОМ.
Добавлена поддержка операционной системы Astra Linux «Смоленск» 1.7.
Исправлено поведение команды ALTER TABLE IF EXISTS таблица RENAME TO таблица1 в случаях, когда исходная таблица отсутствует и при этом загружено расширение pg_pathman . Ранее выдавалось сообщение уровня ERROR , а теперь — NOTICE ; именно так ведёт себя Postgres Pro , когда расширение pg_pathman не загружено.
Приложение pg_probackup обновлено до версии 2.5.1, в которой добавлена новая команда catchup для копирования экземпляра Postgres Pro напрямую, без использования каталога резервных копий. Это позволяет добавить новый ведомый сервер в параллельном режиме или синхронизировать отставший ведомый сервер с ведущим.
Исправлена ошибка в оптимизаторе запросов, в результате которой завышалась стоимость сканирования уникального индекса. Это проявлялось в том, что в случае выбора при сканировании между уникальным индексом и неуникальным предпочитался второй, что могло приводить к чрезмерному количеству обращений к диску и общему замедлению.
Миграция на версию 13.4.1
Если вы производите обновление выпуска Postgres Pro Standard , базирующегося на той же основной версии PostgreSQL , достаточно просто установить новый выпуск в текущий каталог инсталляции.
При обновлении с версии Postgres Pro 13.2.1 и ниже вы должны перестроить покрывающие индексы с неключевыми столбцами, для которых на уровне таблицы определено правило сортировки.
Если вы используете PTRACK в процедуре резервного копирования, реализуемой c помощью утилиты pg_probackup , и обновляетесь с Postgres Pro версии 13.2.2 или ниже, сделайте полную резервную копию базы данных после обновления.
Для перехода с PostgreSQL или выпуска Postgres Pro Standard , базирующегося на предыдущей основной версии PostgreSQL , обратитесь к инструкциям в Замечаниях к выпуску Postgres Pro Standard 13.1.1.
Закажите тестирование СУБД Postgres Pro
или попробуйте сами!
Зарегистрированные пользователи могут свободно скачать самую свежую версию Postgres Pro Standard.
Вы можете ознакомиться с преимуществами других продуктов компании
Postgres Pro Certified
Postgres Pro Enterprise
Postgres Pro Enterprise Certified ,
Источник
Курс молодого бойца PostgreSQL
Хочу поделиться полезными приемами работы с PostgreSQL (другие СУБД имеют схожий функционал, но могут иметь иной синтаксис).
Постараюсь охватить множество тем и приемов, которые помогут при работе с данными, стараясь не углубляться в подробное описание того или иного функционала. Я любил подобные статьи, когда обучался самостоятельно. Пришло время отдать должное бесплатному интернет самообразованию и написать собственную статью.
Данный материал будет полезен тем, кто полностью освоил базовые навыки SQL и желает учиться дальше. Советую выполнять и экспериментировать с примерами в pgAdmin‘e, я сделал все SQL-запросы выполнимыми без разворачивания каких-либо дампов.
1. Использование временных таблиц
При решении сложных задач трудно поместить решение в один запрос (хотя, многие стараются так сделать). В таких случаях удобно помещать какие-либо промежуточные данные во временную таблицу, для использования их в дальнейшем.
Такие таблицы создаются как обычные, но с ключевым словом TEMP, и автоматически удаляются после завершения сессии.
Ключ ON COMMIT DROP автоматически удаляет таблицу (и все связанные с ней объекты) при завершении транзакции.
2. Часто используемый сокращенный синтаксис Postgres
- Преобразование типов данных.
Выражение:
можно записать менее громоздко:
- Сокращенная запись конструкции (I)LIKE ‘%text%’
LIKE воспринимает шаблонные выражения. Подробности в мануале
оператор LIKE можно заменить на
* (две тильды со звездочкой)
Поиск регулярными выражениями (имеет отличный от LIKE синтаксис)
оператор
* (одна тильда и звездочка) регистронезависимая версия
Приведу пример поиска разными способами строк, которые содержат слово text
Cокращенный синтаксис | Описание | Аналог (I)LIKE |
---|---|---|
Проверяет соответствие выражению с учётом регистра | LIKE ‘%text%’ | |
Проверяет соответствие выражению без учёта регистра | ILIKE ‘%text%’ | |
! ‘%text%’ | Проверяет несоответствие выражению с учётом регистра | NOT LIKE ‘%text%’ |
! * ‘%text%’ | Проверяет несоответствие выражению без учёта регистра | NOT ILIKE ‘%text%’ |
3. Общие табличные выражения (CTE). Конструкция WITH
Очень удобная конструкция, позволяет поместить результат запроса во временную таблицу и тут же использовать ее.
Примеры будут примитивны, чтобы уловить суть.
a) Простой SELECT
Таким способом можно ‘оборачивать’ какие-либо запросы (даже UPDATE, DELETE и INSERT, об этом будет ниже) и использовать их результаты в дальнейшем.
b) Можно создать несколько таблиц, перечисляя их нижеописанным способом
c) Можно даже вложить вышеуказанную конструкцию в еще один (и более) WITH
По производительности следует сказать, что не стоит помещать в секцию WITH данные, которые будут в значительной степени фильтроваться последующими внешними условиями (за пределами скобок запроса), ибо оптимизатор не сможет построить эффективный запрос. Удобнее всего положить в CTE результаты, к которым требуется несколько раз обращаться.
4. Функция array_agg(MyColumn).
Значения в реляционной базе хранятся разрозненно (атрибуты по одному объекту могут быть представлены в нескольких строках). Для передачи данных какому-либо приложению часто возникает необходимость собрать данные в одну строку (ячейку) или массив.
В PostgreSQL для этого существует функция array_agg(), она позволяет собрать в массив данные всего столбца (если выборка из одного столбца).
При использовании GROUP BY в массив попадут данные какого-либо столбца относительно каждой группы.
Сразу опишу еще одну функцию и перейдем к примеру.
array_to_string(array[], ‘;’) позволяет преобразовать массив в строку: первым параметром указывается массив, вторым — удобный нам разделитель в одинарных кавычках (апострофах). В качестве разделителя можно использовать
Выдаст результат:
Выполним обратное действие. Разложим массив в строки при помощи функции UNNEST, заодно продемонстрирую конструкцию SELECT columns INTO table_name. Помещу это в спойлер, чтобы статья не сильно разбухала.
5. Ключевое слово RETURNIG *
указанное после запросов INSERT, UPDATE или DELETE позволяет увидеть строки, которых коснулась модификация (обычно сервер сообщает лишь количество модифицированных строк).
Удобно в связке с BEGIN посмотреть на что именно повлияет запрос, в случае неуверенности в результате или для передачи каких либо id на следующий шаг.
Можно использовать в связке с CTE, организую безумный пример.
Таким образом, выполнится удаление данных, и удаленные значения передадутся на следующий этап. Все зависит от вашей фантазии и целей. Перед применением сложных конструкций обязательно изучите документацию вашей версии СУБД! (при параллельном комбинировании INSERT, UPDATE или DELETE существуют тонкости)
6. Сохранение результата запроса в файл
У команды COPY много разных параметров и назначений, опишу самое простое применение для ознакомления.
7. Выполнение запроса на другой базе
Не так давно узнал, что можно адресовать запрос к другой базе, для этого есть функция dblink (все подробности в мануале)
Если возникает ошибка:
«ERROR: function dblink(unknown, unknown) does not exist»
необходимо выполнить установку расширения следующей командой:
8. Функция similarity
Функция определения схожести одного значения к другому.
Использовал для сопоставления текстовых данных, которые были похожи, но не равны друг другу (имелись опечатки). Сэкономил уйму времени и нервов, сведя к минимуму ручную привязку.
similarity(a, b) выдает дробное число от 0 до 1, чем ближе к 1, тем точнее совпадение.
Перейдем к примеру. С помощью WITH организуем временную таблицу с вымышленными данными (и специально исковерканными для демонстрации функции), и будем сравнивать каждую строку с нашим текстом. В примере ниже будем искать то, что больше похоже на ООО «РОМАШКА» (подставим во второй параметр функции).
Получим следующий результат:
Если возникает ошибка
«ERROR: function similarity(unknown, unknown) does not exist»
необходимо выполнить установку расширения следующей командой:
Сортируем по similarity DESC. Первыми результатами видим наиболее похожие строки (1— полное сходство).
Необязательно выводить значение similarity в SELECT, можно просто использовать его в условии WHERE similarity(c_name, ‘ООО «РОМАШКА»’) >0.7
и самим задавать устраивающий нас параметр.
P.S. Буду признателен, если подскажете какие еще есть способы сопоставления текстовых данных. Пробовал убирать регулярными выражениями все кроме букв/цифр, и сопоставлять по равенству, но такой вариант не срабатывает, если присутствуют опечатки.
9. Оконные функции OVER() (PARTITION BY __ ORDER BY __ )
Почти описав в своем черновике этот очень мощный инструмент, обнаружил (с грустью и радостью), что подобная качественная статья на эту тему уже существует. Не вижу смысла дублировать информацию, поэтому рекомендую обязательно ознакомиться с данной статьей (ссылка — habrahabr.ru/post/268983/, автору низкий поклон ) тем, кто еще не умеет пользоваться оконными функциями SQL.
10. Множественный шаблон для LIKE
Задача. Необходимо отфильтровать список пользователей, имена которых должны соответствовать определенным шаблонам.
Как всегда, представлю простейший пример:
Имеем запрос, который выполняет свою функцию, но становится громоздким при большом количестве фильтров.
Продемонстрирую, как сделать его более компактным:
Можно проделать интересные трюки, используя подобный подход.
Напишите в комментариях, если есть мысли, как еще можно переписать исходный запрос.
11. Несколько полезных функций
NULLIF(a,b)
Возникают ситуации, когда определенное значение нужно трактовать как NULL.
Например, строки нулевой длины ( » — пустые строки) или ноль(0).
Можно написать CASE, но лаконичнее использовать функцию NULLIF, которая имеет 2 параметра, при равенстве которых возвращается NULL, иначе выводит исходное значение.
COALESCE выбирает первое не NULL значение
GREATEST выбирает наибольшее значение из перечисленных
LEAST выбирает наименьшее значение из перечисленных
PG_TYPEOF показывает тип данных столбца
PG_CANCEL_BACKEND останавливаем нежелательные процессы в базе
12. Экранирование символов
Начну с основ.
В SQL строковые значения обрамляются ‘ апострофом (одинарной кавычкой).
Числовые значения можно не обрамлять апострофами, а для разделения дробной части нужно использовать точку, т.к. запятая будет воспринята как разделитель
результат:
Все хорошо, до тех пор пока не требуется выводить сам знак апострофа ‘
Для этого существуют два способа экранирования (известных мне)
результат одинаковый:
В PostgreSQL существуют более удобный способ использовать данные, без экранирования символов. В обрамленной двумя знаками доллара $$ строке можно использовать практически любые символы.
получаю данные в первозданном виде:
Если этого мало, и внутри требуется использовать два символа доллара подряд $$, то Postgres позволяет задать свой «ограничитель». Стоит лишь между двумя долларами написать свой текст, например:
Увидим наш текст:
Для себя этот способ открыл не так давно, когда начал изучать написание функций.
Заключение
Надеюсь, данный материал поможет узнать много нового начинающим и «средничкам». Сам я не являюсь разработчиком, а могу лишь назвать себя любителем SQL, поэтому то, как использовать описанные приемы — решать Вам.
Желаю успехов в изучении SQL. Жду комментариев и благодарю за прочтение!
UPD. Вышло продолжение
Источник