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 (размер базы).
В следующем уроке разберём миграции: как менять схему базы вместе с кодом.
Прошли материал до конца? Отметьте урок пройденным.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут. Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства. Мой прогресс