Все потоки
Поиск
Написать публикацию
Обновить
110.42

PostgreSQL *

Свободная объектно-реляционная СУБД

Сначала показывать
Порог рейтинга
Уровень сложности

Что нового в PostgreSQL 11: встроенный веб-поиск

Время на прочтение2 мин
Количество просмотров20K


Продолжая тему интересных возможностей грядущего релиза PostgreSQL 11, я хотел бы рассказать про новую встроенную функцию websearch_to_tsquery. Соответствующий патч разработали Виктор Дробный и Дмитрий Иванов, с правками от Федора Сигаева. Давайте же разберемся, что реализовано в этом патче.
Читать дальше →

DevConf: переход Uber с PostgreSQL на MySQL

Время на прочтение20 мин
Количество просмотров56K
18 мая 2018 года в Digital October состоится DevConf 2018. И мы решили пересказать некоторые интересные доклады с прошлогодней конференции. Там был доклад с несколько холиварным заголовком: "О чём молчит политрук: к дискуссии о переходе Uber с PostgreSQL на MySQL". В нем разработчик MySQL Алексей Копытов рассмотрел различия InnoDb и PostgreSQL на самом низком уровне, включая организацию данных, памяти и репликаций. Предлагаем вашему вниманию краткий пересказ доклада.


История вопроса


Uber перешел с MySQL на Postgres в 2013 году и причины, которые они перечисляют, были во-первых: PostGIS — это геоинформационное расширение для PostgreSQL и хайп. То есть, у PostgreSQL есть некий ореол серьезный, солидная СУБД, совершенный, без недостатков. По крайней мере, если сравнивать с MySQL. Они мало что знали о PostgreSQL, но повелись на весь этот хайп и перешли, а через 3 года пришлось переезжать обратно. И основные причины, если просуммировать их доклад — это плохие эксплуатационные характеристики при эксплуатации в production.
Читать дальше →

Что заморозили на feature freeze

Время на прочтение6 мин
Количество просмотров5.2K


8-го апреля закончился комитфест 2018-03. Те патчи, которые не закомичены на нем (и на 3 предыдущих комитфестах) уже не попадут в релиз PostgreSQL 11: произошла заморозка функциональности (feature freeze). Время подводить итоги.

Главные новости последнего комитфеста (и версии 11 соответственно):
  • увесистый набор патчей для секционирования.
  • JIT-компиляции посвящен только один патч, но это шаг в направлении, которое в будущем наверняка будет развиваться интенсивно.
  • «покрывающие» индексы (INCLUDE-индексы). Это тема уже активно обсуждается и продолжается в разработках.
  • Серия патчей в группе процедурных языков. Они важны в том числе для совместимости со стандартами SQL и миграции с Oracle.
  • Интересные, но не столь резонансные патчи.

Начнем в произвольном порядке.
Читать дальше →

Postgres Enum

Время на прочтение4 мин
Количество просмотров54K
Postgres поддерживает понятие перечислений (enum)

На скорую руку попытался понять что это для бд и для клиента вообще:

  1. enum — статический упорядоченный набор значений
  2. Значение enum занимает на диске 4 байта
  3. Регистр имеет значение, т. е. 'happy' и 'HAPPY' — не одно и то же
  4. Разные enum сравнивать меж собой нельзя (можно, если привести к общему типу или запилить операторы для них)
  5. Невозможно в колонку перечисляемого типа подсунуть значение, которое отсутствует в самом перечислении

Ок, вроде всё как обычно, только в Postgres
Читать дальше →

Секционирование в PostgreSQL 10 и не только

Время на прочтение17 мин
Количество просмотров42K


У многих достижений версии PostgreSQL 10 прописка в разделе Секционирование (Partitioning). И это справедливо: очевидно, что при переходе от 9.6 к 10 произошел мощный технологический скачок. В предыдущих версиях секции строили и управляли ими, теми средствами, что уже имелись: механизмом наследования со всеми его ограничениями и неудобствами.


В версии 10 перешли к более специализированным механизмам и более привычному (в том числе для пользователей Oracle, а с этим приходится считаться) синтаксису. Этот скачок при переходе от 10 к версии 11 должен был подкрепиться важными дополнениями, которые должны расширить функциональность и улучшить производительность операций, использующих секционирование. Но из итогов последнего комитфеста (он закончился 8 апреля) видно, что не все задуманное удалось довести до рабочего состояния, а значит не все попадет в версию 11.


К тому же последние пару лет параллельно велись разработки модуля pg_pathman в Postgres Professional. Некоторые важные возможности пересеклись, некоторые остались уникальны для PostgreSQL и pg_pathman (который работает с ванильной версией, то есть PostgreSQL 10 + pg_pathman дает уже вполне впечатляющую сумму функциональности). Об этом будет отдельная статья. Замечания, относящиеся к версии 11 и к pg_pathman для удобства выделены курсивом.


Эта статья представляет собой переработанные и дополненные фрагменты книжки Nouveaulités de PostgreSQL 10. (с) Dalibo, перевод с французского Игоря Лёвшина (оригинал). Примеры из книги проверены, иногда адаптированы и локализованы для большей наглядности.

Читать дальше →

Что нового в PostgreSQL 11: INCLUDE-индексы

Время на прочтение2 мин
Количество просмотров27K
image

Релиз PostgreSQL 11 состоится еще не скоро, только в октябре. Но фичфриз уже наступил, а значит мы знаем, какие фичи попали в этот релиз, и можем их потестировать, собрав PostgreSQL из ветки master. Особого внимания заслуживает фича под названием INCLUDE-индексы. Патч изначально написан Анастасией Лубенниковой, а потом допилен Александром Коротковым и Федором Сигаевым. Протолкнуть его в PostgreSQL заняло «всего лишь» что-то около трех лет.
Читать дальше →

Spring Boot. Фоновые задачи и не только

Время на прочтение10 мин
Количество просмотров38K

Введение


В данном туториале я хочу привести пример приложения для отправки email-ов юзерам, основываясь на дате их рождения(например с поздравлениями), используя аннотацию Scheduled. Я решил привести данный пример, т к по моему мнению он включает в себя довольно многие вещи, такие как работа с базой данных(в нашем случает это PostgreSQL), Spring Data JPA, новый java 8 time api, email-сервис, создание фоновых задач и небольшую бизнес-логику при этом оставаясь компактным. Сегодня интернет пестрит огромным множеством туториалов которые обычно сводятся к тому как наследоваться от CrudRepository, JpaRepository и тд. Туториал расчитан на то, что вы уже смотрели хотя бы некоторые из них и имеете представление о том, что такое Spring Boot. Я же постараюсь показать пример приложения, которое более обширно показывает его возможности и как с ним работать.

Создание проекта


Идем на Spring Initializr.

Добавляем зависимости:

1. PosgreSQL — в качестве базы данных
2. JPA — доступ к базе
3. Lombok — для удобства и избавления от бойлерплейт кода(не придётся писать геттеры, сеттеры и тд самим), подробнее тут
4. Mail — собственно для работы и отправки email-ов, оф. документация

Указываем группу и артефакт, к примеру com.application и task. Скачиваем и распаковываем проект, затем открываем его в среде разработки, у меня это Intellij IDEA.

База данных


Теперь устанавливаем себе PostgreSQL. Далее создаём базу данных с юзером и паролем. Можно сделать это прямо из IDEA, во вкладке database, можно с помощью командной строки если у вас линукс, следующими командами:

sudo -u postgres createuser <username>
sudo -u postgres createdb <dbname>
$ sudo -u postgres psql
psql=# alter user <username> with encrypted password '<password>';
psql=# grant all privileges on database <dbname> to <username> ;

Также на windows это можно сделать с помощью pgAdmin или его альтернатив.
Читать дальше →

Что нового в DataGrip 2018.1

Время на прочтение4 мин
Количество просмотров12K
Привет! В этом релизном цикле некоторые улучшения появились ещё в минорных обновлениях. Но, так как о них на Хабре мы не пишем, я расскажу в этом посте обо всём новом с момента предыдущего релиза.

image

Читать дальше →

Как ускорили PostgreSQL 10

Время на прочтение16 мин
Количество просмотров24K

(В статье использованы примеры и пояснения из книги Nouveaulités de PostgreSQL 10. (с) Dalibo, перевод с французского Игоря Лёвшина, редактор Егор Рогов (оригинал). Примеры проверены, иногда изменены для большей наглядности)


Конечно, мы уже ждем не дождемся появления 11-й версии PostgreSQL. Но уже сейчас ясно, что некоторые довольно радикальные улучшения производительности появились уже в версии 10. Определенно есть смысл разобраться сначала с ними.


Производительность "десятки" улучшилась сразу в нескольких направлениях. В этой статье речь пойдет об ускорении за счет:


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

Мы начнем с параллелизма.

Читать дальше →

DZ Online Tech: Postgres Professional

Время на прочтение10 мин
Количество просмотров2.8K
Привет.

В прошлом году я начал снимать серию передач/интервью на тему цифровой трансформации бизнеса (они тут, кому интересно — подписывайтесь). Эти передачи были на стыке IT и бизнеса, но, всё же, больше про бизнес.

В процессе стало понятно, что есть немало тем, которые имеют существенную глубину с программерской точки зрения. И в этом году мы начали снимать серию интервью под общим лейблом «DZ Online Tech» — теперь уже с упором на то, что под капотом. Ну и поскольку видео всем смотреть лень, конечно, эти интервью расшифровываются, и сегодня я публикую первое — с Иваном Панченко из Postgres Professional.

Кому интересен оригинал — вот он:


(Ну и, кстати, я не могу поклясться, что все выпуски будут выходить в расшифровке, так что если понравилось — подписывайтесь на ютубе, туда всё приходит раньше и гарантированно.)

Для тех, кто любит читать — расшифровка:

Дайджест новостей из мира PostgreSQL. Выпуск №4

Время на прочтение4 мин
Количество просмотров5.6K


Мы продолжаем знакомить вас с самыми интересными новостями по PostgreSQL.

Релизы


Вышел PostgreSQL 10.3

В этом релизе закрыта дыра безопасности: неконтролируемый путь поиска объектов в схемах БД в pg_dump и других приложениях. Среди других исправлений: теперь логическая репликация не будет пытаться передавать изменения, если таблицы запрещены для публикации. Также вышли обновленные версии 9.x.

Версия Postgres Pro Standard 10.3.1 вышла в тот же день, что и PostgreSQL 10.3, так как необходимо было залатать дыру как можно быстрее. Сейчас доступны уже Postgres Pro Standard 10.3.2 и Postgres Pro Enterprise 10.3.2. В них в том числе добавлена поддержка TOAST для атрибутов INCLUDED в индексах-B-деревьях. Серьезно усовершенствована утилита pg_probackup (теперь это версия 2.0.16).
Читать дальше →

Почему ставить наиболее селективные колонки в префикс составного индекса – это не всегда хорошо

Время на прочтение5 мин
Количество просмотров6.5K

tl;dr В этой статье мы рассмотрим случай, когда лучше переместить самый селективный атрибут из префикса составного индекса в суффикс.


А также рассмотрим, что такое pipeline и как с его помощью select-ить данные уже отсортированными.


Читать дальше →

#PostgreSQL. Ускоряем деплой в семь раз с помощью «многопоточки»

Время на прочтение11 мин
Количество просмотров18K
Всем привет! Мы на проекте ГИС ЖКХ используем PostgreSQL и недавно столкнулись с проблемой долгого выполнения SQL скриптов из-за быстрого увеличения объема данных в БД. В феврале 2018 года на PGConf я рассказал, как мы решали эту проблему. Слайды презентации доступны на сайте конференции. Предлагаю вашему вниманию текст моего выступления.


Читать дальше →

Ближайшие события

Почему фотография Скарлетт Йоханссон заставила PostgresSQL майнить Monero

Время на прочтение5 мин
Количество просмотров31K
В рамках кампании по защите данных наших клиентов мы в Imperva рассказываем о разных методах атак на БД. Если вы не знакомы с нашим исследовательским проектом StickyDB, почитайте прошлые статьи: часть I и часть II. Там описано устройство сети ханипотов (рис. 1), которая заманивает злоумышленников атаковать наши БД, чтобы мы изучали их методы и улучшали защиту.


Рис. 1. Сетевое окружение ханипота StickyDB

Недавно мы обнаружили интересную технику в ходе атаки одного из серверов PostgreSQL. После входа в БД злоумышленник продолжал создавать полезные нагрузки из встроенных бинарников в скачанных картинках, сохранять полезные нагрузки на диск и запускать их. Как часто бывает в последнее время, злоумышленник захватил ресурсы сервера для майнинга Monero. Как будто этого мало, вектором атаки была фотография Скарлетт Йоханссон. Ну тогда ладно. Разберёмся, как это работает!
Читать дальше →

Установка сервера Linux + (Nginx + Apache) + PostgreSQL + PHP на VirtualBox (Ubuntu Server 16.04.3 LTS)

Время на прочтение9 мин
Количество просмотров65K
На просторах интернета не нашел единого рецепта по установке и настройке такого, довольно нестандартного сервера. Решил написать свой рецепт.

Принцип работы следующий:


Статические данные (файлы) отдает Nginx, а динамикой занимается Apache.
Читать дальше →

Пользовательские агрегатные и оконные функции в PostgreSQL и Oracle

Время на прочтение17 мин
Количество просмотров48K

В этой статье мы посмотрим, как в двух системах создавать пользовательские агрегатные и оконные (в терминологии Oracle — аналитические) функции. Несмотря на различия в синтаксисе и в целом в подходе к расширяемости, механизм этих функций очень похож. Но и различия тоже имеются.

Надо признать, что собственные агрегатные и оконные функции встречается довольно редко. Оконные функции вообще по каким-то причинам традиционно относят к разряду «продвинутого» SQL и считают сложными для понимания и освоения. Тут бы разобраться с теми функциями, которые уже имеются в СУБД!

Зачем тогда вообще вникать в этот вопрос? Могу назвать несколько причин:

  • Хотя оконные функции объективно сложнее обычных агрегатных, но ничего запредельного в них нет; это абсолютно необходимый инструмент для SQL-разработчика. А создание собственной оконной функции, даже совсем простой, позволяет лучше разобраться с тем, как работают стандартные.
  • Оконные и агрегатные функции — прекрасный способ совместить процедурную обработку с декларативной логикой. В некоторых ситуациях получается выполнить сложные действия, оставаясь в рамках парадигмы решения задачи одним SQL-запросом.
  • Да и просто интересная тема, а уж тем более интересно сравнить две системы.

Пример, на котором будем тренироваться — подсчет среднего, аналог стандартной функции avg для типа numeric (number в Oracle). Мы напишем такую функцию и посмотрим, как она работает в агрегатном и оконном режимах и может ли она вычисляться несколькими параллельными процессами. А в заключение поглядим на пример из реальной жизни.
Читать дальше →

Индексы в PostgreSQL — 10

Время на прочтение11 мин
Количество просмотров32K

В прошлых статьях мы рассмотрели механизм индексирования PostgreSQL и интерфейс методов доступа, а также хеш-индексы, B-деревья, GiST, SP-GiST, GIN, RUM и BRIN. Нам осталось посмотреть на индексы Блума.

Bloom


Общая идея


Классический фильтр Блума — структура данных, позволяющая быстро проверить принадлежность элемента множеству. Фильтр очень компактен, но допускает ложные срабатывания: он имеет право ошибиться и счесть элемент принадлежащим множеству (false positive), но не имеет права сказать, что элемента нет в множестве, если на самом деле он там присутствует (false negative).

Фильтр представляет собой битовый массив (называемый также сигнатурой) длиной m бит, изначально заполненный нулями. Выбираются k различных хеш-функций, которые отображают любой элемент множества в k битов сигнатуры. Чтобы добавить элемент в множество, нужно установить в сигнатуре каждый из этих битов в единицу. Следовательно, если все соответствующие элементу биты установлены в единицу — элемент может присутствовать в множестве; если хотя бы один бит равен нулю — элемент точно отсутствует.

В случае индекса СУБД мы фактически имеем N отдельных фильтров, построенных для каждой индексной строки. Как правило, в индекс включаются несколько полей; значения этих полей и составляют множество элементов для каждой из строк.

Благодаря выбору размера сигнатуры m, можно находить компромисс между объемом индекса и вероятностью ложного срабатывания. Область применения Блум-индекса — большие, достаточно «широкие» таблицы, запросы к которым могут использовать фильтрацию по любым из полей. Этот метод доступа, как и BRIN, можно рассматривать как ускоритель последовательного сканирования: все найденные индексом совпадения необходимо перепроверять по таблице, но есть шанс вовсе не рассматривать значительную часть строк.
Читать дальше →

Дайджест новостей из мира PostgreSQL. Выпуск №3

Время на прочтение4 мин
Количество просмотров6.7K
Мы продолжаем знакомить вас с самыми интересными новостями по PostgreSQL.

Релизы

Вышел релиз PostgreSQL 10.2
В списке исправлений десятки пунктов. Например: устранение сбоев параллельных процессов при использовании более чем одного узла Gather (Томас Мунро) или Изменение поведения оператора cube ~> int в расширении contrib/cube для обеспечения его совместимости с поиском kNN(Александр Коротков). Одновременно вышли исправления версий 9.x. Напоминаем, что в новой нумерации 10.2 это минорный релиз.
Postgres Pro 10.2.1 Standard
доступен на сайте Postgres Professional Выпуск включает все новые возможности, появившиеся в PostgreSQL 10, а также исправления ошибок, вошедшие в PostgreSQL 10.2. Среди исправлений уже от Postgres Professional:
  • Утилита pg_probackup обновлена до версии 2.0.14 (исправлено поведение ptrack и резервного копирования страниц в условиях гонки; исправлено прерывание параллельного резервного копирования ptrack); добавлено новое состояние резервного копирование (ORPHAN), указывающее, что одна из предыдущих резервных копий испорчена.
  • Обновлён модуль pg_variables.
  • Модуль pg_pathman обновлён до версии 1.4.9. В этой версии исправлена обработка ONLY во всех типах запросов.
Подробности здесь.
2ndQuadrant объявила о выходе версии OmniDB 2.5
Новая версия графического клиента PostgrSQL приблизилась к заявленной цели: стать универсальным клиентом БД. Объявлено, что в новой версии есть базовая поддержка Oracle: можно управлять, соединяться и взаимодействовать с базами Oracle, использовая бóльшую часть функционала, доступного для пользователей PostgreSQL. Появилась новая панель DDL. Релиз 2.5 сопровождался серией статей, например: Oracle with OmniDB ключевого разработчика Вильяма Ивански.
Читать дальше →

Поговорим о юзернеймах

Время на прочтение12 мин
Количество просмотров15K
Пару недель назад я выпустил django-registration 2.4.1. Сборки 2.4.x станут последними в версии django-registration 2.x, дальше будут выходить только исправления багов. Основная ветка сейчас готовится к версии 3.0, откуда планируется удалить кучу устаревшего хлама, накопившегося за последнее десятилетие поддержки, и я постараюсь учесть лучшие практики современных приложений Django.

В ближайшее время напишу подробнее о новой версии, но именно сейчас хочу немного поговорить об обманчиво простой проблеме, с которой приходится иметь дело. Это имена пользователей. Да, я мог бы написать одну из популярных статеек типа «Заблуждения программистов об X», но всё-таки предпочитаю реально объяснить, почему это сложнее, чем кажется, и предложить некоторые советы, как решить проблему. А не просто стебаться без полезного контекста.
Читать дальше →

Как поднять проект на PHP в Docker под Windows

Время на прочтение6 мин
Количество просмотров19K

Чем является статья


Статья является набором простых, понятных инструкций и советов для пользователей Docker под Windows. Статья поможет разработчикам на PHP быстро поднять проект. Описываются проблемы и их решения. Статья полезна тем, кто не обладает бесконечным ресурсом времени, чтобы глубоко копаться в проблемах докера под Windows. Автор был бы бесконечно признателен, если бы ему ранее встретилась подобная статья и автор бы съэкономил бы много сил и времени. Текст может содержать ошибки и неточности.

Читать дальше →

Вклад авторов