Арендовать сервер с 1+ ТБ оперативной памяти вот уже много лет не является проблемой. Например, на сегодняшний день стоимость инстанса x2gd.16xlarge в AWS составляет ~4000$/мес, и это лишь первое попавшееся мне предложение. Многие бизнесы помещаются в память одного-единственного сервера. Отсюда возникает интерес к in-memory СУБД. Ведь при прочих равных они обеспечивают большую производительность, чем условный PostgreSQL. Давайте подумаем, как могла бы выглядеть организация данных в in-memory СУБД, если бы мы писали ее с нуля.

В контексте СУБД можно столкнуться с понятием двойных указателей, которые не имеют ничего общего с int**. Устоявшейся терминологии здесь нет, поэтому кто-то может называть тот же подход «холодными» и «горячими» указателями, или как-то иначе. Идея простая, но как будто бы она не часто описывается в литературе и других источниках. Двойным указателям можно найти применение в разработке не только СУБД, но и всяких бэкендов в целом.

На данный момент мы уже знакомы с написанием пользовательских функций для PostgreSQL, в том числе и полиморфных функций. Однако в PostgreSQL есть тип, заслуживающий особого внимания — это массивы. Давайте же разберемся, как работать с массивами в расширениях на языке C.

Ранее в этом блоге мы познакомились с оконными функциями в PostgreSQL. Возможности оконных функций рассматривались на примере ROWS mode, как наиболее простом для понимания. Однако бывают задачи, где ROWS mode не очень-то помогает, и приходится прибегать к RANGE mode или GROUPS mode. Рассмотрим использование данных режимов на простых примерах.

Некоторое время назад мы научились писать пользовательские функции (UDF) для PostgreSQL на C — см раз, два, три и далее по ссылкам. Если требуется написать функцию, которая принимает условные TIMESTAMP и INT, как-то их обрабатывает, после чего возвращает, к примеру, TEXT, то такая задача не вызывает проблем. Однако PostgreSQL поддерживает и полиморфные функции. То есть, можно объявить функцию, принимающую аргументы произвольного типа. Как прикажете быть в таком случае? Давайте разбираться.

DuckDB — это открытая (лицензия MIT) встраиваемая аналитическая СУБД. В июне этого года был анонсирован релиз 1.0.0, а значит проектом теперь можно пользоватья. Давайте же разберемся, что из себя представляет DuckDB.

Сетевой протокол PostgreSQL можно считать стандартом. Многие новые СУБД реализуют именно его. Что не удивительно, ведь протокол открыт, имеет готовые клиенты для всех популярных языков программирования (см заметки о psycopg2, pgx, JDBC, …), а также всякие полезные штуки вроде PgBouncer. Давайте же разберемся, как этот протокол устроен.

Изучая исходный код PostgreSQL, можно повстречать сущность под названием Portal. Возникает закономерный вопрос — что это такое, а также где и для чего используется? Попробуем разобраться.

Любая система имеет свои ограничения, и PostgreSQL не является исключением. Например, недавно мы разбирали проблему XID wraparound, которая может привести к деградации производительности, а в пределе — перевести СУБД в режим read-only. Сегодня мы рассмотрим еще одно ограничение, связанное с взаимодействием внешних ключей и триггеров.

При разработке пача для PostgreSQL иногда требуется добавить новую функцию, чтобы ее можно было вызывать из SQL. Недавно вопрос о том, как это делается, задали мне два разных человека в течение одной недели. И хотя это простая задача, информация, по всей видимости, является востребованной. Давайте же рассмотрим решение.