Что это даёт ИИ
ИИ получает «глаза» в твою PostgreSQL: читает схему и данные, выполняет SQL, разбирает EXPLAIN-планы, ищет узкие места и предлагает индексы (анализ через гипотетические индексы — hypopg). Это не просто коннектор, а инструмент тюнинга производительности.
Пример: «Почему /orders тормозит?» — ИИ возьмёт реальный запрос, прогонит EXPLAIN ANALYZE, увидит seq scan и предложит конкретный составной индекс с оценкой выигрыша.
Подключение (точные шаги)
Строка подключения передаётся через переменную окружения DATABASE_URI, режим доступа — флагом --access-mode.
Claude Code
Установи (pipx install postgres-mcp), затем добавь в restricted (read-only) режиме:
claude mcp add postgres \
--env DATABASE_URI="postgresql://readonly:pass@localhost:5432/app" \
-- postgres-mcp --access-mode=restricted
Cursor / Claude Desktop
Через установленный бинарь:
{
"mcpServers": {
"postgres": {
"command": "postgres-mcp",
"args": ["--access-mode=restricted"],
"env": {
"DATABASE_URI": "postgresql://readonly:pass@localhost:5432/app"
}
}
}
}
Вариант без локальной установки — Docker-образ crystaldba/postgres-mcp (command: "docker", args: ["run","-i","--rm","-e","DATABASE_URI","crystaldba/postgres-mcp","--access-mode=restricted"]). Образ сам подменяет localhost на host.docker.internal.
Пример использования
Скажи: «Покажи схему таблицы orders и найди топ-5 самых медленных запросов» → ИИ прочитает структуру, через статистику найдёт тяжёлые запросы и предложит оптимизацию (индекс/переписать SQL) — всё в read-only, без риска для данных.
Безопасность
- Только read-only: запускай с
--access-mode=restricted— это ограничивает операции read-only транзакциями.unrestricted(полный read/write, меняет данные и схему) — лишь для локальной разработки. - Отдельная роль БД: заводи Postgres-пользователя с правами только
SELECTна нужные таблицы. Двойная защита: и роль RO, и флаг restricted. - Supply-chain: проект
crystaldba/postgres-mcp(★2.8k) — поддерживаемая замена архивного официальногоserver-postgres. Перед прод-БД проверь источник пакета.
Подводные камни
- Не путайте режимы:
unrestrictedна боевой базе = ИИ может выполнить DROP/UPDATE. По умолчанию ставьтеrestricted. - Из Docker
localhostуказывает в контейнер — образ это лечит автозаменой, но при ручной сети учитывайтеhost.docker.internal. - Большие выборки могут превысить лимит вывода MCP (предупреждение на >10k токенов) — проси агрегаты/LIMIT, а не «весь дамп таблицы».