# PostgreSQL

Подключение к базе PostgreSQL (Supabase, Neon, Yandex Managed PostgreSQL, RDS) — аналитический read-only SQL по данным клиента.

## Сценарии

### Вопрос к базе без SQL
Агент сам разберёт схему — таблицы, колонки и связи — и ответит на вопрос по данным, не требуя от вас ни строчки SQL.

### Метрики прямо в базе
Агент посчитает выручку, средний чек и конверсию запросом к вашей базе и покажет, из каких таблиц и колонок взяты цифры.

### Регулярная сводка по данным
Агент по расписанию прогонит один и тот же запрос — вчерашние продажи или всплеск отказов — и пришлёт результат.

### Сверка с внешними сервисами
Агент сопоставит строки вашей базы с данными подключённых сервисов и покажет расхождения по заказам или платежам.

## Как подключить

### Создайте роль только на чтение
В SQL-консоли базы (Supabase и Neon — «SQL Editor», иначе psql под владельцем) выполните CREATE ROLE analytics_ro LOGIN PASSWORD '…'. Заданный здесь пароль и будет паролем подключения.

### Выдайте роли право читать данные
GRANT pg_read_all_data TO analytics_ro — эта встроенная роль есть с PostgreSQL 14. На версиях старше: GRANT USAGE ON SCHEMA public, GRANT SELECT ON ALL TABLES IN SCHEMA public и ALTER DEFAULT PRIVILEGES для будущих таблиц.

### Проверьте row-level security
pg_read_all_data не обходит row-level security, а в Supabase RLS включён почти везде: без политики SELECT для роли такие таблицы вернут ноль строк, хотя подключение пройдёт успешно.

### Откройте базу для внешних подключений
Хост должен быть доступен из интернета: в Yandex Managed PostgreSQL включите публичный доступ хосту и разрешите в группе безопасности TCP 6432, в RDS — «Publicly accessible: Yes» и правило на 5432. Supabase и Neon открыты сразу.

### Соберите параметры подключения
Хост, порт и имя базы: Supabase — кнопка «Connect» вверху дашборда, Neon — «Connect» на дашборде проекта, Yandex — FQDN хоста и порт 6432. Пользователь и пароль — из вашего CREATE ROLE, режим SSL — require.

## Частые вопросы

### Как подключить PostgreSQL?
Параметрами подключения, а не входом через сервис: хост, порт, имя базы, пользователь, пароль и режим SSL. Заведите роль только на чтение — CREATE ROLE analytics_ro LOGIN PASSWORD и GRANT pg_read_all_data, — её логин и пароль и вводятся в форме.

### Что агент видит в базе?
Список таблиц, колонки и типы и результаты SELECT в пределах прав роли. Роль pg_read_all_data не обходит row-level security: таблицы под RLS без политики SELECT вернут ноль строк.

### Пишет ли агент в базу?
Нет. Разрешены только SELECT, WITH, SHOW и EXPLAIN, по одному запросу за вызов и с лимитом строк — INSERT, UPDATE и любые DDL коннектор отклоняет.

### Что нужно на стороне базы?
Хост должен быть доступен из интернета: в Yandex Managed PostgreSQL включите публичный доступ и откройте TCP 6432, в RDS — publicly accessible и правило на 5432. Supabase и Neon открыты сразу.

[Открыть PostgreSQL](https://www.postgresql.org/docs/current/sql-createrole.html)
