Используется ли PostgreSQL как администратор
Что проверяют
Насколько глубоко вы знаете базу, с которой работает ваш код, и не выдаёте ли запуск CREATE DATABASE на ноутбуке за администрирование. От Python-разработчика обычно не ждут уровня DBA, но ждут, что он не положит прод миграцией. Следом спрашивают про бэкапы, права или разбор медленного запроса.
Как отвечать
Честно разделите, что делали вы, а что DBA или облачный провайдер. Если база управляемая (Yandex Managed PostgreSQL, Amazon RDS), бэкапы и репликацию настраивает платформа, так и скажите. Дальше перечислите, что умеете руками:
- роли и права: отдельная роль приложения без прав суперпользователя,
GRANTна схему и таблицы,ALTER DEFAULT PRIVILEGESдля будущих таблиц; - миграции: Alembic или миграции Django,
CREATE INDEX CONCURRENTLYна больших таблицах (внутри транзакции он не работает, в Alembic для этого естьautocommit_block()),lock_timeout, чтобыALTER TABLE, ждущий блокировку, не выстроил за собой очередь из всех запросов к таблице; - производительность:
EXPLAIN (ANALYZE, BUFFERS), расширениеpg_stat_statements, индексы под реальные запросы, N+1 в ORM; - соединения: пул в SQLAlchemy или asyncpg, PgBouncer перед базой, понимание, что
max_connectionsне резиновый; - обслуживание и бэкапы: autovacuum и раздувание таблиц,
pg_dumpиpg_restoreдля логических копий, а для восстановления на момент времени архив WAL и инструменты вроде pgBackRest.
Если администрирования не было, так и скажите и назовите, что делали как разработчик: писали миграции, разбирали планы запросов, настраивали пул.
Где спотыкаются
Думают, что GRANT ALL PRIVILEGES ON DATABASE app TO app_user даёт доступ к таблицам. Эта команда выдаёт только CONNECT, CREATE и TEMPORARY на уровне базы, права на схемы и таблицы выдаются отдельно. А с PostgreSQL 15 создавать объекты в схеме public по умолчанию может только владелец базы.
Подключают приложение под postgres. Любая SQL-инъекция тогда получает всю базу.
Называют pg_dump раз в сутки полноценной стратегией резервирования. Потерять можно данные за целые сутки, а время восстановления большой базы никто не проверял.