Пошук уроків, статей та іншого контенту
Навчимося підключатися до PostgreSQL через psql, виконувати команди та переглядати доступні об’єкти.
psqlpsql — це консольний клієнт для роботи з PostgreSQL. Через нього можна:
підключатися до сервера PostgreSQL;
виконувати SQL-запити;
створювати та змінювати об’єкти бази даних;
переглядати бази даних, таблиці, схеми й користувачів;
отримувати довідку про команди.
psql не є самим сервером PostgreSQL. Це програма, яка підключається до сервера та надсилає йому команди.
Загальний формат команди:
psql -U ім'я_користувача -d назва_бази_даних -h адреса_сервера -p портОсновні параметри:
-U — користувач PostgreSQL;
-d — база даних;
-h — адреса сервера;
-p — порт сервера.
Типовий порт PostgreSQL — 5432.
Наприклад:
psql -U postgres -d postgresЦя команда підключається до бази postgres від імені користувача postgres. Якщо PostgreSQL запитує пароль, введіть пароль цього користувача.
Для підключення до сервера на іншому комп’ютері можна вказати адресу:
psql -U app_user -d app_db -h localhost -p 5432Якщо параметри не вказати, psql спробує використати значення за замовчуванням. Наприклад, ім’я поточного користувача операційної системи та базу даних із таким самим ім’ям.
psqlПісля успішного підключення з’явиться запрошення, наприклад:
postgres=#Запрошення містить корисну інформацію:
postgres — назва поточної бази даних;
# — ви підключені як суперкористувач;
> — звичайний користувач без прав суперкористувача.
Якщо команда ще не завершена, запрошення може змінитися:
postgres-#Це означає, що psql очікує продовження команди.
SQL-команди потрібно завершувати крапкою з комою ;.
SELECT current_database();Запит поверне назву поточної бази даних.
Ще один приклад:
SELECT version();Цей запит показує версію PostgreSQL.
Команди можна писати в кілька рядків:
SELECT
current_user,
current_database();psql виконає запит після крапки з комою.
psqlpostgres=# SELECT current_database();
current_database
------------------
postgres
(1 row)
postgres=# SELECT 2 + 3;
?column?
----------
5
(1 row)Результат запиту складається з назв колонок, рядків результату та кількості рядків.
psqlОкрім SQL, psql підтримує спеціальні команди клієнта. Вони починаються з символу \ і називаються метакомандами.
Метакоманди обробляє сам psql, тому вони не надсилаються серверу PostgreSQL.
psqlЩоб завершити сеанс:
\qКрапка з комою для \q не потрібна.
Загальна довідка про метакоманди:
\?Довідка про SQL-команди:
\hДовідка про конкретну SQL-команду, наприклад CREATE TABLE:
\h CREATE TABLEКоманда \l показує бази даних, доступні поточному користувачу:
\lПриклад результату:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |Фактичний список і формат можуть відрізнятися залежно від версії PostgreSQL та налаштувань системи.
Для зміни поточної бази даних використовуйте \c або \connect:
\c postgresМожна одночасно вказати користувача:
\c app_db app_userПісля успішного підключення psql покаже повідомлення про нову базу даних і користувача.
Команда \dt показує таблиці поточної схеми:
\dtЩоб переглянути таблиці всіх схем:
\dt *.*Якщо таблиць немає або поточний користувач не має до них доступу, psql повідомить, що об’єктів не знайдено.
Команда \d показує доступні таблиці та інші відносні об’єкти. Щоб переглянути структуру конкретної таблиці:
\d usersДля детальнішої інформації використовуйте \d+:
\d+ usersУ результаті можна побачити:
назви колонок;
типи даних;
значення за замовчуванням;
індекси;
обмеження.
Список схем:
\dnСхема — це простір імен усередині бази даних. У новій базі зазвичай доступна схема public.
Щоб переглянути ролі PostgreSQL:
\duУ PostgreSQL користувачі реалізовані як ролі. Результат покаже їхні імена та основні атрибути.
Нижче наведено послідовність команд, яку можна виконати в тестовій базі даних. Вона створює таблицю, додає один запис і переглядає результат.
CREATE TABLE notes (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
text varchar(200) NOT NULL
);
INSERT INTO notes (text)
VALUES ('Вивчити команди psql');
SELECT id, text
FROM notes;
\d notesПісля виконання CREATE TABLE таблиця з’явиться серед таблиць поточної схеми:
\dtЗапит SELECT покаже доданий запис:
id | text
----+------------------------
1 | Вивчити команди psql
(1 row)Після завершення навчального прикладу таблицю можна видалити:
DROP TABLE notes;Не виконуйте
DROP TABLEдля таблиці, яка містить важливі дані. Команда видаляє таблицю та її дані.
Ось приклад типового сеансу роботи:
$ psql -U postgres -d postgres
Password for user postgres:
psql (16.2)
Type "help" for help.
postgres=# SELECT current_database();
current_database
------------------
postgres
(1 row)
postgres=# \dt
Did not find any relations.
postgres=# CREATE TABLE notes (
postgres(# id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
postgres(# text varchar(200) NOT NULL
postgres(# );
CREATE TABLE
postgres=# INSERT INTO notes (text)
postgres-# VALUES ('Перша нотатка');
INSERT 0 1
postgres=# SELECT * FROM notes;
id | text
----+----------------
1 | Перша нотатка
(1 row)
postgres=# \d notes
postgres=# \qЗверніть увагу:
SQL-команди завершуються ;;
метакоманди psql починаються з \;
після CREATE TABLE і INSERT psql виводить повідомлення про виконану операцію;
запрошення postgres(# означає, що команда ще не завершена.
Якщо ви випадково почали вводити SQL-команду, але хочете її скасувати, натисніть:
Ctrl+CНаприклад:
postgres=# SELECT *
postgres-# Після Ctrl+C psql повернеться до звичайного запрошення:
postgres=#Щоб очистити поточний екран термінала, можна використати метакоманду:
\! clearУ Windows для очищення екрана зазвичай використовують:
\! clsЦі команди запускають команду операційної системи з psql.
SQL-команди можна зберегти у файл, наприклад setup.sql:
CREATE TABLE notes (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
text varchar(200) NOT NULL
);
INSERT INTO notes (text)
VALUES ('Команди з SQL-файлу');Виконати файл під час підключення можна так:
psql -U postgres -d postgres -f setup.sqlТакож файл можна виконати вже після підключення:
\i setup.sqlШлях до файлу може бути відносним або абсолютним:
\i /home/user/project/setup.sqlУ Windows шлях можна записати, наприклад, так:
\i C:/project/setup.sqlЗа замовчуванням psql показує результати в табличному форматі. Для перемикання розширеного формату використовується:
\xПісля цього кожен рядок виводиться як набір полів:
-[ RECORD 1 ]----------------
id | 1
text | Перша нотаткаПовторне введення \x повертає попередній режим.
Це зручно для таблиць із великою кількістю колонок.
psql: command not foundОпераційна система не знайшла програму psql. Перевірте, чи встановлено клієнт PostgreSQL і чи додано його до змінної PATH.
connection refusedКлієнт не може підключитися до сервера. Можливі причини:
сервер PostgreSQL не запущений;
вказано неправильний хост;
вказано неправильний порт;
з’єднання заблоковане налаштуваннями мережі.
password authentication failedСервер відхилив пароль. Перевірте:
ім’я користувача;
пароль;
назву сервера;
спосіб автентифікації.
database does not existБази даних із вказаною назвою не існує або користувач не має доступу до неї. Перевірте назву бази через \l у доступній базі.
relation does not existPostgreSQL не знайшов таблицю або інший об’єкт із такою назвою. Перевірте:
правильність написання назви;
поточну базу даних;
поточну схему;
наявність таблиці через \dt.
Якщо замість результату ви бачите запрошення на кшталт:
postgres-#це означає, що psql чекає завершення команди. Додайте ; або скасуйте введення за допомогою Ctrl+C.
Під час роботи через psql зручно дотримуватися такої послідовності:
Підключитися до потрібної бази даних.
Перевірити поточного користувача:
SELECT current_user;Перевірити поточну базу:
SELECT current_database();Переглянути доступні таблиці:
\dtВиконати SQL-запит.
Перевірити структуру об’єкта через \d.
Завершити роботу командою:
\qПлутати SQL-команди та метакоманди psql. Наприклад, SELECT — це SQL, а \dt — команда клієнта.
Забувати крапку з комою в кінці SQL-команди.
Додавати крапку з комою до метакоманд без потреби.
Підключатися не до тієї бази даних і шукати в ній таблиці іншого проєкту.
Використовувати DROP TABLE, не перевіривши назву таблиці.
Ігнорувати поточну схему під час пошуку таблиці.
Вважати, що успішне підключення автоматично дає права на всі об’єкти бази даних.
psql — консольний клієнт PostgreSQL.
Для підключення найчастіше використовують psql -U користувач -d база.
SQL-команди завершуються крапкою з комою.
Метакоманди psql починаються з \ і не потребують крапки з комою.
\l показує бази даних.
\c змінює поточне підключення.
\dt показує таблиці.
\d назва показує структуру об’єкта.
\dn показує схеми.
\du показує ролі та користувачів.
\q завершує роботу з psql.