Основные команды psql с примерами
PostgreSQL, часто называемый просто Postgres, представляет собой бесплатную систему управления реляционными базами данных (СУБД) с открытым исходным кодом, известную своей надежностью, функциональностью и производительностью. Она активно разрабатывается уже более 35 лет и считается одной из самых передовых доступных СУБД с открытым исходным кодом.
psql
является официальным клиентом CLI для управления базой данных PostgreSQL. Он поддерживает интерактивное и неинтерактивное использование.
Ниже перечислены 10 наиболее часто используемых psql
команд с примерами.
1. Подключитесь к базе данных
Если вы используете имя пользователя PostgreSQL по умолчанию postgres
и не установили пароль, вы можете подключиться к базе данных с помощью следующей команды. Вам будет предложено ввести пароль пользователя postgres
.
psql
Если вы используете другое имя пользователя или установили пароль для postgres
пользователя, вы можете подключиться к базе данных с помощью следующей команды. Вам будет предложено ввести пароль для указанного пользователя.
psql -U your_username
Если сервер PostgreSQL работает на порту, отличном от порта по умолчанию (5432), вы можете подключиться к базе данных с помощью следующей команды. Вам будет предложено ввести пароль для указанного пользователя.
psql -p 5433
Если сервер PostgreSQL работает на удаленном хосте, вы можете подключиться к базе данных с помощью следующей команды. Вам будет предложено ввести пароль для указанного пользователя.
psql -h remote_host -p 5432
Во всех этих примерах вы также можете указать имя базы данных, к которой хотите подключиться, используя эту -d
опцию. Например, чтобы подключиться к базе данных с именем my_database
, вы должны использовать следующую команду:
2. Запустите одну команду: -c
Чтобы запустить одну команду в PostgreSQL с использованием psql
интерфейса командной строки, вы можете использовать -c
параметр, за которым следует команда SQL, которую вы хотите выполнить.
psql -d my_database -c "SELECT * FROM my_table;"
3. Список доступных баз данных: \l
Эта команда просмотрит все базы данных, доступные в данный момент на сервере. Это может быть полезно для получения обзора доступных вам баз данных.
postgres-# \l
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
postgres | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
template0 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
(3 rows)
4. Переключиться на указанную базу данных: \c
Команда \c
переключается на указанную базу данных. Это полезно для работы с конкретной базой данных после того, как вы перечислили доступные базы данных.
postgres-# \c postgres
psql (16.0, server 16.1 (Debian 16.1-1.pgdg120+1))
You are now connected to database "postgres" as user "postgres".
5. Список таблиц: \dt
Команда \dt
выводит список всех таблиц, доступных на данный момент в текущей базе данных. Это может быть полезно для получения обзора таблиц, доступных вам в текущей базе данных.
postgres-# \dt
List of relations
Schema | Name | Type | Owner
-------+---------+-------+--------
public | mytable | table | postgres
public | users | table | postgres
public | orders | table | postgres
6. Опишите указанную таблицу: \d
Команда \d
описывает указанную таблицу. Это предоставляет информацию о столбцах таблицы, типах данных и ограничениях.
postgres-# \d my_table
Table: my_table
Column | Data Type | Constraints
-------+------------+-------------------
id | SERIAL | PRIMARY KEY
name | VARCHAR(50) | NOT NULL
email | VARCHAR(100) | UNIQUE
7. Список пользователей: \du
Команда \du
выводит список всех пользователей, существующих в текущей базе данных.
postgres-# \du
List of roles
Role name | Attributes
---------+------------
postgres | SUPERUSER, CREATEDB, CREATEROLE, INHERIT, REPLICATION
myuser | CREATEDB
Команда \du username
используется для вывода списка ролей (пользователей) в текущей базе данных, имеющих указанное имя пользователя.
postgres-# \du myuser
List of roles
Role name | Attributes
---------+------------
myuser | CREATEDB
Если указанное имя пользователя не соответствует ни одной роли в текущей базе данных, на выходе будет пустая таблица.
postgres-# \du youruser
List of roles
Role name | Attributes
---------+------------
|
8. Показать соединения: pg_stat_activity
Чтобы просмотреть все активные соединения, выполните следующий SQL-запрос.
postgres-# SELECT * FROM pg_stat_activity;
pid | datname | username | client_addr | client_port | backend_start | query_start | query | state
-------+---------+---------+-------------+-------------+---------------+---------------+-----------------+----------
1234 | mydb1 | postgres | 192.168.1.100 | 5432 | 2023-10-04 15:04:00 | 2023-10-04 15:04:05 | SELECT * FROM mytable; | active
5678 | mydb2 | user1 | 192.168.1.101 | 5432 | 2023-10-04 15:05:00 | 2023-10-04 15:05:03 | UPDATE mytable SET name = 'John Doe' WHERE id = 123; | idle in transaction
9012 | postgres | 192.168.1.102 | 5432 | 2023-10-04 15:06:00 | | | idle |
Вы также можете фильтровать результаты по конкретным соединениям на основе таких критериев, как имя пользователя, имя базы данных или состояние. Например, чтобы вывести список только активных подключений к базе данных mydb
, используйте следующий запрос:
postgres-# SELECT * FROM pg_stat_activity WHERE datname = 'mydb' AND state = 'active';
Аналогично, чтобы получить список соединений, выполняющих запросы в данный момент, используйте следующий запрос:
postgres-# SELECT * FROM pg_stat_activity WHERE state IN ('active', 'idle in transaction');
9. Уничтожить соединение: pg_terminate_backend(), kill
После того, как вы определили PID соединения, которое хотите разорвать, вы можете использовать эту pg_terminate_backend()
функцию для его завершения. Например, следующая команда разорвет соединение с PID 1234:
postgres-# SELECT pg_terminate_backend(1234);
Использование команды kill
— менее распространенный метод уничтожения соединений PostgreSQL, поскольку он может быть более опасным и менее надежным, чем использование функции pg_terminate_backend()
. Однако это может быть необходимо в определенных ситуациях, например, когда соединение не отвечает или функция pg_terminate_backend()
дает сбой.
kill -9 1234
10. Выйти: \q, Ctrl+D, Ctrl+Z
С помощью \q
команды или сочетания клавиш Ctrl+D
(или Ctrl+Z
в Windows). Это немедленно приведет к выходу из интерфейса командной строки psql.
\q