← Данные
12 мин · просто · Урок 1 из 5

Postgres: psql и базовые запросы

Как подключиться к Postgres, осмотреться через psql и выполнить базовые SQL-запросы. Минимум для DevOps.

Зачем DevOps база данных

Почти за каждым сервисом стоит база, и чаще всего это PostgreSQL. Писать сложные запросы — работа разработчика, но DevOps-инженеру нужно уметь подключиться, посмотреть, что внутри, проверить, жива ли база, и понять проблему с подключением. Этого минимума хватает на 90% задач у базы.

Подключение через psql

psql это консольный клиент Postgres. Подключение задаётся хостом, портом, пользователем и базой:

psql -h db.example.com -p 5432 -U appuser -d appdb

Те же параметры можно передать одной строкой подключения (она же приходит из переменной окружения из урока про env-vars):

psql "postgres://appuser:secret@db.example.com:5432/appdb"

Пароль прямо в команде — только для примера. В реальной работе он попадёт в историю shell и в список процессов. Передавай его через переменную PGPASSWORD или файл ~/.pgpass, а строку подключения держи в секрете.

Внутри psql есть служебные команды на обратном слеше, они помогают осмотреться:

\l           -- список баз
\dt          -- таблицы текущей базы
\d users     -- структура таблицы users
\du          -- роли (пользователи)
\q           -- выйти

Базовые запросы

SQL-запросы заканчиваются точкой с запятой. Четыре основных действия:

-- прочитать
SELECT id, email FROM users WHERE active = true LIMIT 10;

-- добавить
INSERT INTO users (email, active) VALUES ('a@b.com', true);

-- изменить
UPDATE users SET active = false WHERE id = 42;

-- удалить
DELETE FROM users WHERE id = 42;

Самое опасное здесь — UPDATE и DELETE без WHERE: они затронут всю таблицу. Привычка проверять условие отдельным SELECT перед изменением спасает от «обновил всех пользователей вместо одного».

Полезное для эксплуатации

Несколько запросов, которые нужны именно DevOps:

-- жива ли база, сколько подключений
SELECT count(*) FROM pg_stat_activity;

-- размер базы
SELECT pg_size_pretty(pg_database_size('appdb'));

-- кто что выполняет прямо сейчас
SELECT pid, state, query FROM pg_stat_activity WHERE state = 'active';

pg_stat_activity показывает текущие подключения и запросы. По нему видно зависший долгий запрос или то, что подключений уже под лимит. Лимит подключений и его роль разбирает урок про пулы соединений.

Что важно запомнить

psql подключается по хосту/порту/пользователю/базе или по строке postgres://.... Служебные команды на обратном слеше (\dt, \d) помогают осмотреться.

Базовые запросы — SELECT/INSERT/UPDATE/DELETE; UPDATE и DELETE без WHERE бьют по всей таблице, поэтому условие проверяют заранее.

Для эксплуатации полезны pg_stat_activity (подключения и активные запросы) и pg_database_size (размер базы).

В следующем уроке разберём миграции: как менять схему базы вместе с кодом.

Прошли материал до конца? Отметьте урок пройденным.