Пошук уроків, статей та іншого контенту
Підключите Node.js до PostgreSQL, налаштуєте драйвер і виконаєте перший запит до бази даних.
PostgreSQL — це окрема серверна база даних, а Node.js підключається до неї через драйвер. Для PostgreSQL найчастіше використовують пакет pg.
Потрібні:
встановлений Node.js;
встановлений і запущений PostgreSQL;
створена база даних;
проєкт Node.js;
пакет pg.
Перевірити встановлення Node.js і PostgreSQL можна командами:
node --version
psql --versionСтворіть базу даних, наприклад node_demo.
У терміналі це можна зробити командою:
createdb -U postgres node_demoАбо підключіться до PostgreSQL:
psql -U postgresі виконайте SQL-команду:
CREATE DATABASE node_demo;Для підключення знадобляться такі параметри:
хост: localhost;
порт: 5432;
ім’я бази даних: node_demo;
користувач: наприклад, postgres;
пароль користувача PostgreSQL.
Створіть папку проєкту та ініціалізуйте Node.js:
mkdir node-postgres-demo
cd node-postgres-demo
npm init -yВстановіть драйвер PostgreSQL:
npm install pgПакет pg надає Node.js можливість:
відкривати з’єднання з PostgreSQL;
виконувати SQL-запити;
отримувати результати запитів;
використовувати параметри запитів.
Не варто записувати пароль до бази даних безпосередньо у файлі з кодом. Замість цього використовуйте змінні середовища.
У Linux або macOS перед запуском програми можна виконати:
export PGHOST=localhost
export PGPORT=5432
export PGDATABASE=node_demo
export PGUSER=postgres
export PGPASSWORD=your_passwordУ PowerShell на Windows:
$env:PGHOST = "localhost"
$env:PGPORT = "5432"
$env:PGDATABASE = "node_demo"
$env:PGUSER = "postgres"
$env:PGPASSWORD = "your_password"Замініть your_password на пароль користувача PostgreSQL.
Драйвер pg розуміє ці стандартні змінні середовища автоматично. Їх можна передати в об’єкт Pool явно, щоб було зрозуміло, які параметри використовує програма.
Створіть файл index.js:
const { Pool } = require("pg");
const pool = new Pool({
host: process.env.PGHOST || "localhost",
port: Number(process.env.PGPORT) || 5432,
database: process.env.PGDATABASE || "node_demo",
user: process.env.PGUSER || "postgres",
password: process.env.PGPASSWORD,
});
async function main() {
try {
const result = await pool.query(
`
SELECT
NOW() AS current_time,
current_database() AS database_name,
$1::text AS message
`,
["Привіт із Node.js"]
);
console.log("Підключення успішне");
console.log(result.rows[0]);
} catch (error) {
console.error("Помилка підключення або виконання запиту:");
console.error(error.message);
} finally {
await pool.end();
}
}
main();Запустіть програму:
node index.jsЯкщо підключення успішне, результат буде приблизно таким:
Підключення успішне
{
current_time: 2026-08-18T10:20:30.000Z,
database_name: 'node_demo',
message: 'Привіт із Node.js'
}Точне значення current_time залежатиме від поточного часу.
const pool = new Pool({
host: "localhost",
port: 5432,
database: "node_demo",
user: "postgres",
password: process.env.PGPASSWORD,
});Pool — це пул з’єднань із базою даних. Він може повторно використовувати з’єднання замість створення нового для кожного запиту.
У простих програмах достатньо створити один пул і використовувати його для всіх запитів.
const result = await pool.query("SELECT NOW()");Метод pool.query():
отримує SQL-запит;
передає його PostgreSQL;
очікує результат;
повертає об’єкт із даними запиту.
Рядки результату знаходяться у властивості rows:
console.log(result.rows);Для запиту, який повертає один рядок, часто використовують:
console.log(result.rows[0]);У прикладі використовується параметр $1:
const result = await pool.query(
"SELECT $1::text AS message",
["Привіт із Node.js"]
);$1 відповідає першому значенню в масиві параметрів.
Параметри потрібно використовувати для даних, які надходять від користувача або з інших зовнішніх джерел:
const name = "Олена";
const result = await pool.query(
"SELECT $1::text AS name",
[name]
);Не вставляйте значення у SQL-рядок через конкатенацію:
// Небезпечний підхід
const name = "Олена";
const query = `SELECT * FROM users WHERE name = '${name}'`;Такий код може спричинити SQL-ін’єкцію. Параметризований запит передає значення окремо від SQL-команди.
finally {
await pool.end();
}pool.end() закриває з’єднання з PostgreSQL.
Для короткої програми це потрібно робити після виконання запиту. У довготривалому серверному застосунку пул зазвичай створюють один раз під час запуску, а не закривають після кожного HTTP-запиту.
Підключення до бази даних може завершитися помилкою. Наприклад:
PostgreSQL не запущений;
неправильний пароль;
база даних не існує;
неправильний порт;
користувач не має доступу до бази.
Тому запити потрібно виконувати всередині try...catch:
try {
const result = await pool.query("SELECT 1 AS value");
console.log(result.rows);
} catch (error) {
console.error(error.message);
}Без обробки помилки програма може завершитися з незрозумілим повідомленням або необробленою помилкою.
Для перевірки підключення зручно виконати простий запит:
const { Pool } = require("pg");
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
async function checkConnection() {
try {
const result = await pool.query("SELECT 1 AS connected");
console.log(result.rows[0]);
} catch (error) {
console.error("Не вдалося підключитися до PostgreSQL:", error.message);
} finally {
await pool.end();
}
}
checkConnection();У цьому варіанті потрібно встановити змінну DATABASE_URL.
Приклад її значення:
postgresql://postgres:your_password@localhost:5432/node_demoУ Linux або macOS:
export DATABASE_URL="postgresql://postgres:your_password@localhost:5432/node_demo"
node index.jsУ PowerShell:
$env:DATABASE_URL = "postgresql://postgres:your_password@localhost:5432/node_demo"
node index.jsЯкщо пароль містить спеціальні символи, наприклад @ або #, у рядку підключення їх потрібно правильно кодувати. Для початку простіше використовувати окремі змінні PGHOST, PGPORT, PGDATABASE, PGUSER і PGPASSWORD.
ECONNREFUSEDPostgreSQL не запущений або програма підключається не до того хоста чи порту.
Перевірте:
чи запущений сервер PostgreSQL;
чи правильний порт 5432;
чи правильне значення PGHOST.
password authentication failedНеправильний пароль або ім’я користувача.
Перевірте значення:
echo $PGUSER
echo $PGPASSWORDУ PowerShell:
echo $env:PGUSER
echo $env:PGPASSWORDdatabase does not existБаза даних із вказаним ім’ям не створена або вказано неправильне ім’я.
Перевірте значення PGDATABASE і створіть базу даних за потреби:
CREATE DATABASE node_demo;Якщо змінні середовища встановлено в одному терміналі, а програму запущено в іншому, вони можуть бути недоступні. Встановіть змінні та запустіть Node.js у тому самому вікні термінала.
Для роботи з PostgreSQL у Node.js використовується пакет pg.
Pool керує пулом з’єднань із базою даних.
SQL-запит виконується методом pool.query().
Результат запиту доступний у властивості result.rows.
Параметри $1, $2 та інші допомагають безпечно передавати значення в SQL-запити.
Параметри підключення краще зберігати у змінних середовища.
Після завершення роботи короткої програми пул потрібно закрити методом pool.end().