Postgresso 33
Продолжаем экспериментировать с форматом: в этом выпуске нет раздела Релизы, но несколько релизов разбросаны по соответствующему контексту.
Люди
Список коммитеров прирос Даниэлем Густафссоном (Daniel Gustafsson, Greenplum, из Стокгольма) и Джоном Найлором (John Naylor, 2ndQuadrant=EDB)
Даниэль: я использую, разрабатываю и продвигаю open source последние 15 лет, фокусируясь в основном на PostgreSQL и curl. Сейчас я работаю в Greenplum. Я контрибьютор PostgreSQL и работаю над кодом ядра PostgreSQL. А ещё над веб-сайтом, там я коммитер. Кроме программистских дел, я ещё и организую международные конференции: Nordic PGDay, FOSDEM, PGDay и PostgreSQL Conference Europe.
Джон не любит, видимо, говорить о себе. В корпоративном блоге есть парочка его статей.
Интервью: Брин Льюэллин
Брин (Bryn Llewellyn) в своё время ушёл из Oracle в YugaByte, и об этом его с пристрастием расспрашивают. Брин занимается в компании документацией, которая, по его словам, более развитая, с бОльшим количеством примеров, которые придумывает Брин (мне она, честно говоря, не показалась удобной). И это занятие его более чем устраивает: объясняя, понимаешь глубже. К тому же, всегда можно порезвиться, придумывая интересные примеры.
Самое актуальное для сообщества — горизонтальная масштабируемость Postgres. В YugaByte решают (или уместней сказать «обходят»?) эту проблему «единственным разумным путём: код PostgreSQL используется как «верхняя половина», C-слой для операций с SQL. А «нижняя половина» заменена полностью — это югабайтовский код, обеспечивающий внутреннюю масштабируемость с распределённостью на глобальном уровне и с внутренней отказоустойчивостью. Там схема распределённых транзакций реплицирует все сохраняемые данные, используя произвольно высокий фактор репликации (то есть настолько большой, насколько нужно). Описание этой двухэтажной архитектурной схемы лучше начать со статьи в югабатовском блоге: Distributed PostgreSQL on a Google Spanner Architecture — Storage Layer. А потом уже смотреть постгресовый слой.» YugaByte доступен в открытых кодах на гитхабе.
Что раздражает Брина в Postgres? Прежде всего то, что PL/pgSQL не поддерживает вложенные подпрограммы и пакеты — в отличие от Oracle. Из-за этого почти невозможно создавать модульный софт, с повторным использованием компонент, а куда без этого в больших проектах.
Статьи
Почему мы перешли с Oracle на PostgreSQL, и как это сделать
Опыт перехода с Oracle 12 на Postgres Pro Standard 13. Волнующая тема, соответственно более полусотни комментариев. В том числе от Сбера: «В Сбере тоже есть адекватные менеджеры и миграция с Oracle на PG идет полным ходом, в ближайшем времени постараемся опубликовать статью с нашим опытом.»
Статья богата на ссылки. Автор, plotn1 (Плотников?) предлагает перед чтением его статьи глянуть, чего энтерпрайзу в PostgreSQL не хватает. Кстати, если лень или некогда, можно глянуть нашу сводку «нехваток» в Postgresso 31.
Автор также ссылается на доклады и мастер-классы PGConf.Russia, советует начать вот с этого доклада о миграции с Oracle: Как я перестал беспокоиться и перенес 60K строк из 150 процедур PL/SQL в Postgres Анатолия Анфиногенова из АО «ВНИИЖТ». А по ходу дела сверяться с Сопоставление типов данных Oracle с PostgreSQL Дэвида Рейдера (David Rader).
С чего надо было мигрировать:
Данные в Oracle 12. «Стек приложения — java/kotlin вперемежку, spring, разумеется hibernate. Часть приложений подняты на glassfish, часть автономны на spring boot. Такое вот наследие.»
Мигрировали на Postgres Pro Standard 13 на RedOS 7.2 «Муром». Инструмент — ora2pg, он выдал рабочий скрипт создания таблиц. Но все первичные ключи получились numeric (22), пришлось переделывать на int8. Несоответствию типов в Oracle и Postgres в статье посвящено немало места — опыт, полезный для многих.
Перегоняли данные через расширение oracle_fdw, но оно с полпинка не установилось. Автор рассказывает интересный эпизод: он создал тикет в гитхабе автору расширения. Разработчик, вопреки ожиданиям, за день выпустил новую версию, которая устанавливалась без проблем.
Поскольку в Postgres Pro Standard не входит pgpro_scheduler (он входит в Enterprise), то использовали для запуска репликации pg_cron.
Для переписывания сложных функций использовали расширение orafce (Oracle«s Compatibility Functions and Packages). Вместо оракловых древовидных запросов использовали CTE. Настраивали производительность при помощи PGTune.
К слову, вот новый релиз ora2pg на гитхабе неутомимого Жиля Дароля (Gilles Darold):
Ora2Pg 22.1
Database Lab 2.4
Мы не раз рассказывали о Database Lab Engine в Postgresso, в том числе в Postgresso 26, где говорили о DLE 2.0, давали ссылку на полуторачасовой Вторник, на котором Николай Самохвалов и Артём Картасов обсуждали DLE. Вот ещё повод: релиз 2.4.
Database Lab это инструмент для клонирования больших баз, чтобы тестировать или отлаживать запросы или совершенствовать приложения — в не критичном окружении. Но это «тонкие» клоны, поэтому они создаются быстро, и работать с ними удобно.
В 2.4 появились два важных инструмента:
- DB Migration Checker. Он автоматизирует тестирование миграционных проектов в стиле CI/CD (то есть непрерывной интеграции / непрерывного развертывания);
- модуль Terraform для разворачивания DLE в AWS в «логическом» режиме развёртывания. При этом исходная база PostgreSQL может быть физически расположена где угодно.
В чейнджлоге есть много пунктов менее значительных изменений. Подробности с реалистичными примерами тестирования миграции здесь.
pg_validate_extugprade 1.0.0beta
Плодовитый Жульен Руо (Julien Rouhaud) придумал инструмент-расширение для тестирования расширений после их обновления соответствующими скриптами. Нишевый продукт, как он сам говорит, для тех, кто разрабатывает и поставляет расширения. pg_validate_extugprade проверяет, создадут ли ваши скрипты, если вы установите расширение версии X, и затем обновите до Y, точно те же объекты, что появятся при установке сразу версии Y. И выдаст список отличий, если они есть. Код открытый, написано на RUST, совместимо с PostgreSQL 9.2 — 14.
Empire ERP. Занимательная бухгалтерия: PostgreSQL
Владимир Номхоев aka nomhoi предлагает развлечься бухгалтерией. У статьи предыстория. Начиналось всё, как ни странно, с AI Cup — с конкурса программистов, пишущих игры-стратеги с использованием искусственного интеллекта. Но оттуда взят, видимо, только программный фреймворк — в том числе с Python, конечно, и дополненный C++. До этого в статье Empire ERP. Занимательная бухгалтерия: главная книга, счета, баланс набросали прототип ERP, там же прописаны требования, а в этой статье базу уже берут готовой с гитхаба. Всё собирается в докере.
В конце статьи Владимир утверждает, что вот, мол, всю логику модуля «Бухгалтерия» удалось реализовать на стороне сервера базы данных и создать SQL API. Насчёт «всей» не берусь судить. А в самом-самом конце неожиданное возвращение к ИИ: оказывается, большие учёные планируют планирование ERP-задач поручить тоже ИИ (глава Automated Planning).
Потоковый захват изменений из PostgreSQL/MySQL с помощью Apache Flink
Александр Сергеенко из компании «Неофлекс», демонстрирует реализацию паттерна Change Data Capture (CDC) средствами Apache Flink.
Тема, как мне кажется, не очень многим постгресистам знакомая. Больше, наверное, кафкианцам. В статье есть вполне информативная теоретическая часть. «CDC можно представить в виде ETL-процесса, где «E» отвечает за анализ лога базы данных, «T» — по обыкновению занимается преобразованиями и агрегациями событий, а «L» — транслирует полученные агрегаты или сырые события потребителю.» Логи в контексте ETL возникают немного неожиданно, и действительно WAL используется. В статье много незнакомых мне терминов вроде event-carried state transfer или event sourcing.
Дальше уже строятся схемы работы CDC с участием Postgres.
В результате упрощений схемы взаимодействия c Postgres остаётся Flink CDC Connectors — набор коннекторов для MySQL и PostgreSQL, разработанный Alibaba и Ververica, который позволяет подключаться к логам БД прямо из Flink-джоба (задания).
Собирается демонстрационный проект — сценарий захвата изменений из WAL PostgreSQL — как docker compose, в котором:
- PostgreSQL — собственно, мастер-источник изменений;
- Elasticsearch — для записи результатов и промежуточных событий;
- Kibana — для визуализации содержимого индексов Elasticsearch;
- Job Manager кластера Apache Flink (в количестве одной штуки) — для управления кластером Flink;
- Task Manager кластера Apache Flink (в количестве одной штуки) — для выполнения DAG-графа операторов CDC-джоба.
Готовый docker-compose.yml можно скачать из гитхаба. Дальше начинаются уроки труда: «реализуем несложный сценарий захвата изменений из WAL PostgreSQL, приправленный объединениями, агрегацией, стеком ELK и целым кластером Flink, правда в миниатюре.»
Streaming JSON Data into Postgres with Open Source Kafka Sink Connectors
Пол Бребнер (Paul Brebner, Instaclustr) в части 6 (здесь начало) с Кафкой добрался до Postgres. Но кафкианских ужасов не дождались: всё интегрируется и взаимодействует. Instaclustr, где работает Пол, приобрела компанию Credativ, и теперь managed PostgreSQL на их «дорожной карте», отсюда и тяга разобраться в потрохах этого решения.
Итак, в этой статье PostgreSQL будет замещать Elasticsearch, а Apache Superset — Kibana, родственницу Elastic, в фазе анализа и визуализации.
Опуская промежуточные этапы, заметим, что для сброса данных в Postgres нужны Kafka Connect PostgreSQL Sink Connectors. Их несколько, в том числе опенсорсные. Огорчившись видом давно не обновляемых коннекторов, сбрасывающих поток JSON-ов в Postgres, Пол выбирает те коннекторы, что работают через JDBC-драйверы:
- IBM Kafka Connect sink connector for JDBC,
- Aiven Connect JDBC Connector,
- Apache Camel JDBC Kafka Sink Connector.
Спойлер: успеха удалось добиться только с кастомизированным под задачу IBM-коннектором.
Статья написана легко и даже весело. С интересными ссылками-отступлениями-отвлечениями:
Postgres как машина Тьюринга.
Головоломка Ханойская башня, реализованная на Postgres.
GTS2 — игра-стратегия на PostgreSQL + pl/python.
Кстати, о JDBC: встречайте JDBC 42.2.23.
Plv8-build: the easiest way to install PLV8 extension to current PostgreSQL release version
Алексей Фадеев со своими коллегами из компании sibedge поработали над пакетами для установки plv8 в Postgres 13. Теперь установить можно за считанные секунды — авторы предлагают проверить: вот для Linux, вот в Докере.
На эту работу, признаётся Алексей, их подвигнула статья Ивана Панченко aka x-wao PostgreSQL: Серверное программирование на «человеческом» языке (PL/Perl, PL/Python, PL/v8) годовалой давности.
Опыт хранения IP-адресов в PostgreSQL
Пишет некто slava-a из компании Karuna («мы лучшая компания в твоей жизни» — примерно всё, что можно узнать из профиля). Тема, однако, любопытная: в Postgres имеются типы данных inet/cidr для хранения IP-адресов. Создаётся табличка и к ней GiST-индекс. Чтобы найти, из какой страны IP, приходится строить функцию с циклом. На табличке с 1 млн адресов она отрабатывает почти за секунду.
Но оказывается, что есть расширение ip4r и оно даёт выигрыш в скорости выполнения поискового запроса в 20 раз. Дальше там есть ещё и про возможности гео-модуля для nginx.
Низкоуровневое обнаружение (LLD) в Zabbix через SQL-запросы
В блоге компании Galas Software («Интегратор, который работает исключительно с системами мониторинга») появилась статья, в которой для мониторинга используется расширение pg_stat_monitor от Percona (собирают из исходников). Он работает с pg_stat_statements, но агрегирует информацию. Когда в инструментах мониторинга анализируют информацию pg_stat_statements, обычно возникает вопрос сброса этой информации — когда и как. В pg_stat_monitor:
- собирается статистика и объединяется в корзину (агрегат);
- корзина собирается и хранится заданный период времени;
- когда время истекает, pg_stat_monitor сбрасывает всю накопленную статистику и начинает собирать её заново.
Простенько и со вкусом?
Читаются данные через Zabbix. Это почти мейнстрим. mamonsu, например, работает как активный агент (Zabbix Trapper). В статье создают шаблон в Zabbix для работы по ODBC, добавляют макросы к Zabbix, создают мастер-элемент данных, получают вывод в JSON и совершают ещё некоторые действия.
Мониторинг PostgreSQL. Расшифровка аудиочата Data Egret и Okmeter
Владимир Гурьянов, разработчик okmeter (на хабре он с построк-эротическим ником magvai69) опубликовал в блоге компании Флант («DevOps-as-a-Service, Kubernetes, обслуживание 24×7») расшифровку беседы с Алексеем Лесовским и Ильёй Космодемьянским из Data Egret.
Оглавление:
- Кто такие DBA, и чем они занимаются.
- Мониторинг БД и популярные системы.
- Ошибки при мониторинге баз данных.
- Сотрудничество Data Egret и Okmeter.
- Как Data Egret делятся знаниями и опытом.
- Об участии в Open Source-проектах.
- Аутсорсинг DBA и мониторинга.
- О важности soft skills для DBA.
- Вопросы слушателей
Postgres Observability
Истинное наслаждение нажимать на кнопочки номеров версий в произведении Алексея Лесовского Postgres Observability. При переходе с 13 на 14 кое-что меняется. Хотя куда меньше, чем 9.6 => 10. А при 10 => 11 в Observability не меняется вообще ничего. Но это буковки. Сама схема изменилась только 1 раз: в 12 => 13 серый прямоугольник Shared buffers поделился, отдал серый кусочек SLRU Caches. Но, может, я что-то пропустил. Поправьте.
Noisia 0.1.1. Harmful workload generator for PostgreSQL
Вредный генератор нагрузки. Нет, всё же Генератор Вредоносной Нагрузки. Это создание Алексея Лесовского умеет генерировать нагрузку, провоцирующую дедлоки, транзакции, которые ничего не делают, и запросы, которые сбрасывают на диск временные файлы. Зачем? Что не убивает, делает сильней (после настройки). Не пытайтесь повторить тесты без понимания возможных последствий: никаких гарантий, чистый шампанский риск.
Набор тестов на писан на Go. В версии 0.1.1 (до этого был только один релиз — 0.1.0) Go обновлён до версии 1.16.
Почему PostgreSQL тормозит: индексы и корреляция данных
Дмитрий Васильев, aka vadv, Ozon Tech, пишет о том, почему индексы не всегда ускоряют. Одна из возможных причин тормозов индексов — это отсутствие корреляции данных, точнее: о статистической корреляции между физическим порядком строк и логическим порядком значений столбца.
Дмитрий создаёт табличку с полями:
corr — последовательно заполняемым числами от 1 до 10 000 и uncorr — рандомными значениями uuid_generate_v4()
(для чего устанавливается расширение uuid-ossp). В поле correlation представления pg_stats это соответствует значениям 1 и ~0 соответственно. По corr и uncorr создаются индексы и далее исследуются средствами расширения pageinspect. В uncorr данные разбросаны по страницам, и в худшем случае придётся прочитать с диска почти столько страниц (совершить пропорциональное количество IOPS), сколько собираемся вернуть строчек. Дмитрий натравливает на индекс CLUSTER, и получает выигрыш по IOPS в 50 раз.
Ближе к финалу Дмитрий рассказывает о полюбившемся ему ULID (UniversallyUnique LexicographicallySortable Identifier), который лишён недостатков UUID. Его можно использовать при секционировании: generate_ulid(now())
и constraint дадут возможность планировщику выбирать правильную секцию при построении запроса, если в запросе участвует время.
Using GDB To Trace Into a Parallel Worker Spawned By Postmaster During a Large Query
Блогеры High Go начинали с простеньких заметок в жанре 4 dummies, но, чем дальше, тем глубже, засучив рукава, забираются под капот Postgres. Кэри Хуань (Cary Huang) — канадский разработчик High Go, сейчас перерабатывает функциональность, связанную с видимостью записи. И вот он столкнулся с тем, что его код не отрабатывает корректно только в одной ситуации: когда запрос запускает несколько параллельных процессов (workers). Часть данных пропадает из-за того, что ядро считает их невидимыми, в то время как другая часть видима. Чтобы выяснить, что происходит с патчем, он запускал GDB, отслеживая порожденные параллельные процессы и проверяя видимость записей. И решил поделиться опытом использования GDB в этой ситуации.
Вместо вступления автор отсылает к своей же статье об использовании GDB: How to Analyze a PostgreSQL Crash Dump File, а мы ещё и нескромно напомним о нашей с Александром Коротковым статье, где проблемы с параллелизмом исследуются ещё и с perf и флейм-графами: Параллелизм в PostgreSQL: не сферический, не конь, не в вакууме.
Поскольку ухватить PID форкнутого процесса не так просто (он может завершиться раньше, чем мы увидим PID), Кэри внедряет брейкпоинт в код функции RegisterDynamicBackgroundWorker
и ParallelWorkerMain
. После прерывания и нашего continue
дебаггер напишет номер нового процесса и будет отслеживать уже его. А дальше — по вкусу.
Control Runaway Postgres Queries With Statement Timeout
Статья Крейга Керстинса (Craig Kerstiens, Crunchy Data) посвящена всего одному параметру: statement_timeout
, который, правда, может задаваться на разных уровнях: запрос/пользователь/база данных.
Настройка таймаута может оказаться критичной в ситуации, когда:
- интенсивная бизнес-логика или отчёты требуют сканирования большого числа записей и происходит агрегация;
- миграция базы данных, изменяющая очень много записей;
- плохо написанные запросы, когда JOIN трогает миллионы записей;
- расходящиеся рекурсивные запросы.
Для какого-нибудь сверхдолгоиграющего миграционного запроса можно задать в сессии:
SET statement_timeout = '30m';
Для обычных хватает и
ALTER DATABASE mydatabase SET statement_timeout ='60s';
Менее сфокусированные рекомендации по тюнингу базы есть у коллеги Крейга — Тома Шварца (Tom Swartz) — Optimize PostgreSQL Server Performance Through Configuration. В статье Крейга попалась ещё одна любопытная ссылка: Range Types & Recursion: How to Search Availability with PostgreSQL.
Benchmarking CentOS vs Rocky Linux with Postgres
Динеш Кумар (Dinesh Kumar, MigOps) проверяет производительность на наборах тестов Phoronix:
- компилятор;
- процессор;
- память;
- диск;
- стресс (stress-ng);
- PostgreSQL (pgbench);
- (stress-ng + pgbench)
Результат: Rocky на всех тестах чуть быстрее => можно пересаживаться с CentOS на Rocky.
dbForge Schema Compare for PostgreSQL v. 1.2
В новой версии этого визуального пакета для сравнения схем, который разрабатывает и поддерживает компания devart с штаб-квартире в Чехии и разработчиками из Украины, появились:
- Object Filter, с ним можно разворачивать базу, исключая объекты при синхронизации в соответствии с условиями, заданными в фильтре;
- экспорт отчёта в форматы HTML, Excel и XML;
- дополнительные пре- и пост-синхронизационные скрипты, которые отрабатываются в начале и в конце синхронизации схем;
- поддержка материализованных представлений в Amazon Redshift;
- возможность работать с облаком Heroku;
- новые косметические возможности: расцвечивать несоответствия кода в окне Text Compare (diff).
Accessing PostgreSQL databases in Go
Статья Эли Бендерского (Eli Bendersky), знакомого любителям Go — серию его статей Разработка REST-серверов на Go перевели и выложили на хабр, например, в блоге компании RUVDS.com. В этой статье автор рассматривает несколько вариантов доступа:
- библиотека database/sql с драйвером pq,
- драйвер и тулкит pgx,
- пакет sqlx.
Эти варианты пробуют на демо-базе. Есть и общие соображения по поводу (не)использования ORM в Go.
Increasing Max Parallel Workers Per Gather In Postgres
Майкл Кристофидес (Michael Christofides), составляющий половину команды pgMustard, не только выступил на PgDay с докладом EXPLAIN: beyond the basics, но и опубликовал, в числе прочего, эту заметку о параметрах при распараллеливании запросов. Там нет ни глубокомысленных рассуждений об оптимальном распараллеливании на многоядерных и многоузловых машинах, не балует он диаграммами производительности. Но зато есть полезные ссылки: сама тема уж очень актуальна — лишнее напоминание не помешает.
Он же напоминает о существовании parallel_setup_cost, parallel_tuple_cost, min_parallel_table_scan_size, min_parallel_index_scan_size, например (об этом есть здесь).
Майкл ссылается на Как работают параллельно выполняемые запросы (How Parallel Query Works), советует глянуть справочные материалы и ссылки на сайте postgresqlco.nf и послушать семинар PostgreSQL Parallelism Do«s and Don«ts Себастьяна Дресслера (Sebastian Dressler) из swarm64 на канале Postgres Conference. А вот там действительно есть и разбор планов, и сравнение времени выполнения в зависимости от настроек, удачные и неудачные запросы с точки зрения параллелизма. И вообще в swarm64 (о которой мы немного писали в Postgresso 32, 30, 21) обзавелись парой дюжин видео об ускорении параллельных запросов (как с их FPGA, так и без).
PG-Strom 3.0
Напомним: это расширение PostgreSQL, которое поддерживает GPU. В этой версии:
- появилась поддержка NVIDIA GPUDirect Storage (cuFile);
- несколько PostGIS-функций можно гонять на GPU;
- поддержка GpuJoin с индексом GiST;
- механизм GPU Cache переделан;
- появилась поддерка кастомных типов данных/функций/операторов для GPU, но пока в экспериментальном режиме;
- лицензия переехала с GPLv2 на PostgreSQL.
Интересная, странная тема: казалось бы, распараллеливание вычислений — что может быть актуальней? Но базы не слишком охотно параллелятся, и такие проекты как Strom (или Swarm64) явно не в фокусе внимания. Видны периферийным db-зрением.
Modern data analysis with PostgreSQL — JSONB throws Window functions out the…
А вот это пишет Томас Рихтер (Thomas Richter) уже из самой Swarm64. По мотивам реальных событий. Томас начинает с изложения традиционного подхода к анализу заказов/доставок в электронном магазине, а именно: к двум таблицам — orders (заказов) и order_shipment_status (статусов доставки заказов). Они соединяются по order_id в отношении один-ко-многим. Далее Томас выуживает пропавшие заказы с помощью запроса с оконными функциями. Всё работает, но запрос такой дорог.
Томас человек современный, поэтому он вместо двух таблиц просто добавляет колонку типа jsonb со статусами в таблицу заказов orders. Он использует json-операторы @>, →, →>, || и GIN-индекс. Вместо соединения двух таблиц мы теперь просто обновляем поле в таблице в соответствующей строке. Он, кстати, считает, своей растущей популярностью Postgres обязан таким вот современным возможностям.
Cut Out the Middle Tier: Generating JSON Directly from Postgres
Пол Рамси (Paul Ramsey, Crunchy Data) предлагает убирать генерацию JSON из промежуточных слоёв Web-сайтов, где это можно —, а такое случается часто — и использовать средства самого PostgreSQL, благо они уже довольно развиты. Начинает Пол с row_to_json()
, потом json_agg()
, но это разминка: дальше Пол, используя запросы с CTE, формирует вложенные структуры JSON на выходе, которые отражают взаимосвязь таблиц. Postgres может генерить самые разнообразные JSON, которые можно сразу отдавать приложению, а иногда даже конечному пользователю.
Наш отдел образования рекомендует прекрасную книгу Г.Домбровской, Б.Новикова и А.Бейликовой на эту тему: PostgreSQL Query Optimization: The Ultimate Guide to Building Efficient Queries. В ней они развивают идею о преодолении несоответствия между реляционной и объектно-ориентированной моделью данных с помощью транспортного уровня, для которого удобно использовать JSON. И вот тут-то генерация и разбор JSON внутри базы данных очень важны. ДМК Пресс активно работает над переводом, книга скоро выйдет на русском языке.
Гибридное использование RDBMS и NoSQL подходов для обработки транскриптомных данных
Что такое транскриптома я пока не разобрался, но точно, что и PostgreSQL 12, и JSON здесь используются для вполне актуальных биотехнологических задач. Для нас, читателей, тут важно, что надо хранить в БД и структурированную, и слабо структурированную информацию таким образом, чтобы удобно было составлять разнообразные, иногда сложные запросы. К десяткам и сотням тысяч генетических последовательностей в результате секвенирования, надо дать свободный и удобный доступ широкому кругу биологов — пусть ищут, что им нужно.
Некоторые данные вполне вписываются в реляционную модель данных, но в общем случае невозможно заранее полностью декларировать структуру данных, которая будет получена в результате обработки лабораторных результатов. То, что плохо структурируется, хранится в столбцах типа jsonb. Для таких данных столбцы индексировали как GIN. Запросы к таким данным используют операторы → и →>.
Самое интересное, что для поиска используется и тип ts_vector, для чего в ход идут функция to_tsvector()
и оператор @@ — как в обычном полнотекстовом поиске. Ведь ген — это своеобразный текст.
DB Connection Calculator
Для облачной PaaS-платформы Heroku, в которую входит и Heroku Postgres придумали калькулятор — Heroku Database Connection Calculator — вы задаёте движочками количество dyno (dyno — это такие херокские контейнеры для приложений, они бывают web dynos и worker dynos), воркеров, процессов и тредов и получаете количество нужных соединений. В плане Heroku Postgres количество соединений ограничено 500, но можно запустить PGBouncer. Калькулятор сделали для Heroku в Rails Autoscale.
Конференции
PG Day'21 Russia
Записи докладов #PGDayRussia 2021 доступны на YouTube-канале конференции
Например: