Что такое PostgreSQL
Что проверяют
Вопрос звучит как просьба дать определение, но собеседующий смотрит, работали ли вы с PostgreSQL из приложения на Java или только писали запросы. Ценится не список достоинств из документации, а понимание MVCC, соединений и поведения драйвера.
Как отвечать
Коротко: объектно-реляционная СУБД с открытым исходным кодом, строгим соблюдением ACID, расширяемая типами, функциями и модулями. Дальше переходите к тому, что влияет на код.
Конкурентность построена на MVCC: пишущая транзакция не блокирует читающих, читающая не блокирует пишущих, каждая видит свой снимок данных. Плата за это старые версии строк, которые убирает autovacuum; при частых обновлениях таблица и индексы раздуваются, и это отдельная эксплуатационная тема.
Уровень изоляции по умолчанию Read Committed, грязного чтения нет вовсе. Сериализуемый уровень реализован через проверку конфликтов и может завершить транзакцию ошибкой, поэтому код обязан уметь её повторить.
Каждое соединение это отдельный процесс на сервере, поэтому пул обязателен, а при большом числе экземпляров сервиса нужен ещё и внешний пул перед базой. Тысяча открытых соединений это не масштабирование, а способ положить сервер.
Из прикладного: JSONB с индексами GIN, массивы, частичные и функциональные индексы, оконные функции, RETURNING, партиционирование, расширения для полнотекстового поиска и векторного поиска.
Где спотыкаются
Ждут, что результат придёт потоком сам собой. Драйвер по умолчанию вычитывает ответ целиком в память, и настройка размера выборки работает только внутри транзакции с выключенным автокоммитом, иначе большой отчёт роняет сервис по памяти.
Путают типы времени. Тип с зоной хранит момент времени в UTC и саму зону не сохраняет, а тип без зоны хранит календарные значения; смешивание их в одной схеме гарантированно всплывает на переводе часов и на пользователях из разных поясов.
Оставляют настройки генерации ключей в ORM по умолчанию. Шаг выделения идентификаторов в приложении и шаг последовательности в базе расходятся, и получаются либо дыры в нумерации, либо конфликты ключей при параллельной записи.