Пошук уроків, статей та іншого контенту
Створимо базу даних, налаштуємо параметри підключення й перевіримо доступ із командного рядка та клієнта.
Для роботи потрібні:
запущений сервер PostgreSQL;
ім’я користувача;
пароль користувача;
назва бази даних;
адреса сервера;
порт.
Типові параметри локального підключення:
host: localhost
port: 5432
database: postgres
user: postgresПорт 5432 є стандартним для PostgreSQL. Якщо під час встановлення було вибрано інший порт, у командах потрібно вказати саме його.
PostgreSQL встановлюється разом із командними утилітами. Одна з них — pg_isready. Вона перевіряє, чи приймає сервер підключення.
pg_isready -h localhost -p 5432Якщо сервер працює, результат буде схожим на:
localhost:5432 - accepting connectionsЯкщо сервер не запущений, потрібно запустити службу PostgreSQL засобами операційної системи або через програму, яка керує встановленим PostgreSQL.
Для підключення використовується клієнт psql.
psql -h localhost -p 5432 -U postgres -d postgresПараметри команди:
-h — адреса сервера;
-p — порт;
-U — ім’я користувача;
-d — назва бази даних.
Після виконання команди PostgreSQL може попросити пароль користувача postgres.
Успішне підключення відкриває інтерактивний режим psql. Його запрошення може виглядати так:
postgres=#Символ # зазвичай означає, що користувач має адміністративні права.
Щоб перевірити поточне підключення, виконайте команду \conninfo:
postgres=# \conninfoПриклад результату:
You are connected to database "postgres" as user "postgres" on host "localhost" at port "5432".Команди, що починаються з \, є спеціальними командами клієнта psql, а не SQL-командами.
Бажано не використовувати адміністративного користувача для роботи застосунку. Створимо окремого користувача app_user і базу даних app_db.
Підключившись до PostgreSQL як адміністратор, виконайте:
CREATE ROLE app_user
LOGIN
PASSWORD 'strong_password';
CREATE DATABASE app_db
OWNER app_user;Тут:
CREATE ROLE створює роль PostgreSQL;
LOGIN дозволяє використовувати роль для підключення;
PASSWORD задає пароль;
CREATE DATABASE створює базу даних;
OWNER app_user призначає користувача власником бази.
У навчальному прикладі використано простий пароль. У реальному проєкті потрібно використовувати надійний пароль і не зберігати його у відкритому коді.
Після виконання команд вийдіть із psql:
\qПідключимося до нової бази даних під створеним користувачем:
psql -h localhost -p 5432 -U app_user -d app_dbПісля введення пароля виконайте:
SELECT current_database(), current_user;Очікуваний результат міститиме:
current_database | current_user
------------------+-------------
app_db | app_userЦе підтверджує, що:
підключення відбулося до бази app_db;
підключення виконано від імені app_user.
Щоб переконатися, що користувач має доступ не лише до бази, а й до її об’єктів, створимо таблицю:
CREATE TABLE users (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL,
email text NOT NULL UNIQUE
);
INSERT INTO users (name, email)
VALUES ('Олена', 'olena@example.com');
SELECT id, name, email
FROM users;Команда CREATE TABLE створює таблицю, INSERT додає запис, а SELECT читає дані.
Повний приклад перевірки в psql:
-- Показуємо поточну базу даних і користувача
SELECT current_database(), current_user;
-- Створюємо таблицю користувачів
CREATE TABLE users (
id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL,
email text NOT NULL UNIQUE
);
-- Додаємо один запис
INSERT INTO users (name, email)
VALUES ('Олена', 'olena@example.com');
-- Читаємо доданий запис
SELECT id, name, email
FROM users;Вихід із клієнта:
\qДля підключення клієнту потрібно передати такі параметри:
host=localhost
port=5432
dbname=app_db
user=app_user
password=пароль_користувачаЇх можна вказати безпосередньо в команді:
psql "host=localhost port=5432 dbname=app_db user=app_user"У цьому випадку пароль зазвичай буде запитано окремо.
Також параметри можна передавати через змінні середовища PostgreSQL:
PGHOST=localhost PGPORT=5432 PGDATABASE=app_db PGUSER=app_user psqlПісля запуску клієнт попросить пароль. Такий спосіб зручний, коли кілька команд використовують однакові параметри підключення.
Не варто без потреби задавати пароль через PGPASSWORD:
PGPASSWORD=strong_password psql -h localhost -U app_user -d app_dbПароль у такій команді може потрапити до історії команд або бути видимим іншим процесам. Для ручної роботи безпечніше дозволити psql запросити пароль.
psqlЯкщо клієнт уже запущено, підключитися до іншої бази можна командою \connect:
\connect app_db app_userПісля цього перевірте з’єднання:
\conninfoЩоб переглянути список баз даних, використовуйте:
\lЩоб переглянути таблиці поточної бази:
\dtЯкщо таблиця users була створена успішно, вона з’явиться у списку.
SQL-команди в psql зазвичай завершуються крапкою з комою:
SELECT 1;Без крапки з комою клієнт чекатиме продовження команди.
Для завершення роботи з psql використовуйте:
\qpsql: command not foundОпераційна система не знайшла клієнт psql.
Перевірте:
чи встановлено PostgreSQL;
чи додано каталог із PostgreSQL до змінної PATH;
чи доступна утиліта psql у терміналі.
connection refusedСервер не запущений або використано неправильні адресу чи порт.
Перевірте стан сервера:
pg_isready -h localhost -p 5432Також перевірте, чи справді PostgreSQL працює на порту 5432.
password authentication failedНеправильні ім’я користувача або пароль.
Перевірте:
параметр -U;
назву користувача;
пароль;
чи не підключаєтеся ви до іншого екземпляра PostgreSQL.
database does not existБаза даних із вказаною назвою не існує або в назві є помилка.
Список баз можна переглянути в адміністративному підключенні:
\lpermission deniedКористувач не має потрібних прав. Переконайтеся, що він є власником бази або йому надано необхідні привілеї.
Перевірте, чи завершено SQL-команду крапкою з комою:
SELECT current_user;У цьому уроці ми:
перевірили доступність сервера PostgreSQL;
підключилися до нього через клієнт psql;
створили окремого користувача;
створили базу даних і призначили її власника;
підключилися до нової бази;
створили таблицю та додали запис;
перевірили параметри активного підключення.
Для підключення потрібно знати адресу сервера, порт, назву бази даних, користувача та пароль. У локальному середовищі типовими значеннями є localhost, порт 5432, а також окремі база й користувач для застосунку.