PostgreSQL: вопросы на собеседовании
Вопросы и ответы по PostgreSQL: подготовка, примеры и типичные ошибки.
Проверьте себя по PostgreSQL: 5 вопросов, ~10 минут
Вопросов: 105. Частые идут первыми, сложные возвращаются на повторение.
- Что такое свойства ACID и как PostgreSQL их гарантирует?Junior· спрашивают почти всегда
- Сценарий: запрос ожидает 100 строк, а возвращает 1 000 000. План плохой. Что проверяешь?Senior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Чем CREATE INDEX отличается от CREATE INDEX CONCURRENTLY? Почему в проде почти всегда нужен второй?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое EXPLAIN и EXPLAIN ANALYZE и как их использовать для оптимизации запросов?Senior· спрашивают почти всегда· полный разбор — Jobs/Boost
- В чём разница между EXPLAIN, EXPLAIN ANALYZE и EXPLAIN (ANALYZE, BUFFERS)? Почему BUFFERS важен?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Чем INNER JOIN отличается от LEFT JOIN, RIGHT JOIN и FULL OUTER JOIN? Покажи на примере.Junior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое MVCC (Multi-Version Concurrency Control) и как PostgreSQL его реализует?Middle· спрашивают почти всегда
- Что такое MVCC и как Postgres реализует «писатели не блокируют читателей»? Что такое xmin/xmax?Senior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое N+1 query problem? Как ловить, как чинить?Middle· спрашивают почти всегда
- В чём разница между
INNER JOIN,LEFT JOIN,RIGHT JOINиFULL OUTER JOIN?Junior· спрашивают почти всегда - Какие типы индексов есть в Postgres (B-tree, Hash, GIN, GiST, BRIN, SP-GiST) и когда какой использовать?Middle· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое PostgreSQL и каковы его ключевые преимущества перед другими реляционными СУБД?Junior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое PITR и чем
pg_dumpотличается от base backup + WAL archive?Senior· спрашивают почти всегда· полный разбор — Jobs/Boost - Для каких типов нагрузок PostgreSQL подходит лучше всего, а где стоит выбрать другую базу данных?Junior· спрашивают почти всегда
- Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?Middle· спрашивают почти всегда
- Чем WHERE отличается от HAVING? Почему нельзя ставить агрегат в WHERE?Junior· спрашивают почти всегда· полный разбор — Jobs/Boost
- Что такое ACID? Объясни каждую букву на конкретном примере с банковским переводом.Middle
- Что такое массивы (arrays) и колонки JSONB в PostgreSQL и когда их использовать?Middle· полный разбор — Jobs/Boost
- Что такое autovacuum и какие у него типичные проблемы в high-write нагрузке?Senior· полный разбор — Jobs/Boost
- Что такое autovacuum и как настраивать его поведение?Senior
- Что такое CTEs (Common Table Expressions) и как работают рекурсивные CTE?Middle· полный разбор — Jobs/Boost
- Что такое connection pooling и зачем он нужен? Чем PgBouncer отличается от Pgpool? Чем session/transaction/statement pooling отличаются?Senior
- Что такое cost и почему actual time важнее cost?Middle· полный разбор — Jobs/Boost
- Что такое CTE (WITH ...)? Чем WITH RECURSIVE отличается от обычного? Когда он нужен?Middle
- Как возникают deadlocks и как PostgreSQL с ними справляется?Senior
- Что такое deadlock? Покажи минимальный пример из двух транзакций.Middle· полный разбор — Jobs/Boost
- Что такое dead tuples и почему они появляются после UPDATE или DELETE?Middle· полный разбор — Jobs/Boost
- Что такое partitioning в Postgres (declarative partitioning, RANGE/LIST/HASH)? Когда оно реально нужно, а когда — оверкилл?Senior· полный разбор — Jobs/Boost
- Запрос работает 200мс в dev, 30 секунд в проде. С чего начнёшь?Senior· полный разбор — Jobs/Boost
- Чем EXISTS отличается от IN? Когда они дают разный план?Middle
- Что такое expression index в PostgreSQL?Middle· полный разбор — Jobs/Boost
- Когда использовать GIN-индекс vs GiST-индекс?Middle· полный разбор — Jobs/Boost
- Чем GIN отличается от GiST? Почему для JSONB и full-text обычно GIN?Middle
- Что такое GROUP BY и в каком порядке выполняются клаузы (FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT)?Junior
- Каковы различные стратегии соединений (join), которые использует PostgreSQL (nested loop, hash join, merge join)?Senior· полный разбор — Jobs/Boost
- Чем JSON отличается от JSONB? Когда что использовать? Какие операторы для JSONB (->, ->>, @>)?Middle
- Транзакция «висит» уже 40 минут и блокирует половину сервиса. Как найти, кто и что блокирует?Senior· полный разбор — Jobs/Boost
- Что такое numeric vs float8/real? Почему в финансах берут numeric?Junior
- Что такое partial index и когда его стоит использовать?Middle· полный разбор — Jobs/Boost
- Что такое partial index и какой кейс его оправдывает? Покажи пример с WHERE status = 'pending'.Middle· полный разбор — Jobs/Boost
- Что такое pg_stat_statements и как им находить топ-N медленных запросов?Middle· полный разбор — Jobs/Boost
- В чём разница между физической и логической репликацией в PostgreSQL?Senior· полный разбор — Jobs/Boost
- Что такое PITR (point-in-time recovery)? Как её настроить? Что такое base backup + WAL archive?Senior
- Как сравнить PostgreSQL с альтернативами по consistency, latency, throughput, cost и operability?Middle· полный разбор — Jobs/Boost
- В чём разница между
DELETE,TRUNCATEиDROP?Junior· полный разбор — Jobs/Boost - Как понять, что проблема связана со схемой, индексом, запросом, настройками, диском или инфраструктурой?Senior· полный разбор — Jobs/Boost
- Представьте, запросы к PostgreSQL резко замедлились после релиза или роста данных. Как вы будете искать причину?Senior
- Какие ошибки делают команды, когда используют PostgreSQL как «просто SQL-базу» без учёта его особенностей?Middle· полный разбор — Jobs/Boost
- Какая модель хранения, индексации и выполнения запросов у PostgreSQL влияет на архитектуру приложения?Middle· полный разбор — Jobs/Boost
- В чём разница между оптимистичной и пессимистичной блокировкой (locking) в PostgreSQL?Middle· полный разбор — Jobs/Boost
- Какие production-риски есть у PostgreSQL: блокировки, bloat, replication lag, backup/restore, schema changes или плохие запросы?Senior
- Что такое политики безопасности на уровне строк (row-level security, RLS) в PostgreSQL?Senior· полный разбор — Jobs/Boost
- Чем SELECT FOR UPDATE отличается от SELECT FOR SHARE и от SELECT FOR UPDATE SKIP LOCKED? Когда SKIP LOCKED — спасение?Middle· полный разбор — Jobs/Boost
- Чем отличаются streaming replication и logical replication? Когда что использовать?Senior
- Каковы стратегии партиционирования таблиц в PostgreSQL (range, list, hash)?Senior
- Чем text отличается от varchar(n) и char(n)? Что выбирать в проде?Junior
- Чем timestamp отличается от timestamptz? Что хранится физически? Почему timestamptz почти всегда лучше?Middle· полный разбор — Jobs/Boost
- Что такое dirty read, non-repeatable read, phantom read, serialization anomaly? Какие из них возможны на каком уровне?Middle· полный разбор — Jobs/Boost