Arenadata PSQL — подробный обзор утилиты командной строки для работы с Arenadata PostgreSQL (ADPG)
Что такое psql в контексте Arenadata
psql — это CLI-интерфейс (интерпретатор команд) PostgreSQL, который используется и в составе Arenadata PostgreSQL (ADPG). Он позволяет взаимодействовать с базой данных в интерактивном режиме или запускать SQL-скрипты. Это основной инструмент администрирования, диагностики и разработки при работе с ADPG.
Arenadata использует функционально расширенную сборку PostgreSQL (ADPG), полностью совместимую с psql, с дополнительными возможностями через расширения (например, pgAudit, patroni, pga_stat_statements и др.).
Установка и запуск
Предварительные требования
- ОС: CentOS 7+, Debian 10+, Ubuntu 20.04+
- Установлен пакет adpg (или docker-контейнер adpg)
- Переменные окружения: PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD
Запуск интерактивной сессии
psql -h localhost -U postgres -d mydb
или с переменными:
export PGHOST=localhost export PGUSER=postgres export PGDATABASE=mydb psql
Основные команды в psql
|
Команда |
Назначение |
|---|---|
|
\l |
Список баз данных |
|
\c dbname |
Подключиться к базе данных |
|
\dt |
Список таблиц |
|
\df |
Список функций |
|
\x |
Переключить режим "развёрнутого" отображения |
|
\timing |
Включить измерение времени выполнения запросов |
|
\i script.sql |
Запуск SQL-скрипта |
|
\copy |
Загрузка данных из CSV |
|
\! |
Выполнение системной команды Linux из psql |
Расширенные возможности psql в Arenadata
1. Поддержка расширений:
- pg_stat_statements — отслеживание частоиспользуемых запросов
- pg_hint_plan — настройка планов выполнения запросов
- pg_audit — аудит действий пользователей
- auto_explain — логгирование тяжёлых запросов
- timescaledb — расширение для time-series (опционально)
2. Использование .psqlrc для автозагрузки настроек
echo "\timing on" >> ~/.psqlrc echo "\set PROMPT1 '%n@%/%R%# '" >> ~/.psqlrc
Типовые задачи с использованием psql
Проверка состояния репликации
SELECT * FROM pg_stat_replication;
Анализ выполнения запросов
SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;
Проверка прав доступа
\du \z tablename
Загрузка данных из CSV
\copy my_table FROM '/path/to/data.csv' CSV HEADER;
Выгрузка данных
\copy (SELECT * FROM my_table) TO 'output.csv' CSV HEADER;
Преимущества psql в ADPG
|
Преимущество |
Обоснование |
|---|---|
|
Полный контроль |
Позволяет выполнить любые команды DDL/DML/DBA |
|
Производительность |
Прямая работа без GUI, идеально для скриптов и CI/CD |
|
Автоматизация |
Интеграция в shell-скрипты и pipelines |
|
Отладка и диагностика |
Инструменты EXPLAIN, ANALYZE, планировщик, stat_views |
|
Совместимость с расширениями |
Поддержка всех PostgreSQL-расширений, включая те, что в ADPG |
Недостатки и ограничения
|
Недостаток |
Обоснование |
|---|---|
|
Требует знания SQL и CLI |
Не интуитивен для новичков, нет визуального представления данных |
|
Отсутствие графического интерфейса |
Нельзя строить графики, дашборды без BI |
|
Ошибки без подсказок |
Ошибки запросов выводятся без объяснений — нужно знать синтаксис |
Советы по использованию
- Всегда включайте \timing при тестировании запросов.
- Используйте \watch для автообновления запроса каждые N секунд.
\watch 5 SELECT count(*) FROM orders WHERE status = 'pending';
- Никогда не передавайте пароли через командную строку — используйте .pgpass.
- Создавайте alias-команды для повторяющихся задач:
alias pgstatus="psql -c 'SELECT * FROM pg_stat_activity;'"
Заключение
psql — это основной инструмент администратора и разработчика, работающего с Arenadata PostgreSQL (ADPG). Он обладает мощнейшими возможностями, легко встраивается в DevOps и позволяет максимально эффективно управлять хранилищем данных. При правильной настройке psql можно использовать как базовую оболочку для всего DWH-процесса — от загрузки данных до аудита.
Готовый .psqlrc с полезными настройками и алиасами
Сохраните этот файл как ~/.psqlrc в домашнем каталоге пользователя PostgreSQL/ADPG:
-- Общие настройки \set QUIET 1 \timing on -- Показывать время выполнения \x auto -- Включить развёрнутый режим при необходимости \set HISTSIZE 1000 -- История запросов \set PROMPT1 '%n@%/%R%# ' -- Вид строки приглашения -- Алиасы (макросы команд) \set show_stat 'SELECT * FROM pg_stat_activity ORDER BY query_start DESC;' \set locks 'SELECT * FROM pg_locks l JOIN pg_stat_activity a ON l.pid = a.pid;' \set long_queries 'SELECT pid, now() - query_start AS runtime, query FROM pg_stat_activity WHERE state != \'idle\' AND now() - query_start > interval \'5 min\';' \set connections 'SELECT client_addr, usename, application_name FROM pg_stat_activity;' \set settings 'SELECT name, setting, unit, category, short_desc FROM pg_settings ORDER BY name;' \set wal 'SELECT * FROM pg_stat_wal_receiver;' \set replication 'SELECT * FROM pg_stat_replication;' \set top_queries 'SELECT query, calls, total_time, rows FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;' -- Использование: -- :show_stat -- :locks -- :top_queries
Пример использования в psql:
:top_queries :connections
Чек-лист команд psql для администратора
|
Категория |
Команда / SQL-запрос |
Назначение |
|---|---|---|
|
Сессия |
\l |
Список баз данных |
|
\c mydb |
Подключиться к БД |
|
|
\dt |
Таблицы текущей схемы |
|
|
Диагностика |
\timing |
Включить измерение времени |
|
SELECT * FROM pg_stat_activity; |
Активные запросы |
|
|
SELECT * FROM pg_stat_replication; |
Статус репликации |
|
|
SELECT * FROM pg_locks; |
Текущие блокировки |
|
|
Аналитика |
SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5; |
Частоиспользуемые запросы |
|
Репликация |
SELECT * FROM pg_replication_slots; |
Слоты WAL |
|
SELECT * FROM pg_stat_wal; |
Объём WAL |
|
|
Права |
\du |
Список ролей |
|
\z |
Таблицы и права доступа |
|
|
Администрирование |
\i script.sql |
Запуск SQL-скрипта |
|
\copy table FROM 'file.csv' CSV HEADER; |
Загрузка данных из файла |
|
|
\copy (SELECT * FROM ...) TO 'file.csv' CSV HEADER; |
Выгрузка данных |
Интерактивный сценарий обучения psql для новичков (минимум CLI + SQL)
Цель:
Познакомить с базовыми командами psql за 20–30 минут, даже если пользователь впервые работает с PostgreSQL.
Блок 1. Подключение и навигация
Задача: подключиться к базе testdb и просмотреть основные объекты
psql -U postgres -d testdb -- Список всех БД \l -- Переключение на нужную БД \c testdb -- Список таблиц \dt -- Подсказка по командам \?
Блок 2. Выполнение простых запросов
Задача: получить и отфильтровать данные
SELECT * FROM users LIMIT 5; SELECT name, age FROM users WHERE age > 30;
Блок 3. Работа со схемой
-- Посмотреть схему таблицы \d users -- Добавить колонку ALTER TABLE users ADD COLUMN city TEXT;
Блок 4. Загрузка и выгрузка данных
-- Загрузка CSV \copy users FROM '/home/user/users.csv' WITH CSV HEADER; -- Выгрузка результата запроса \copy (SELECT * FROM users WHERE age > 40) TO 'output.csv' WITH CSV HEADER;
Блок 5. Завершение
\q -- Выйти из psql
Дополнительные шаги (по желанию)
- Включение \timing, \x для улучшения отображения
- Подключение к другой БД
- Использование \watch для мониторинга



