node-postgres (pg)

Тема дорожной карты · Node.js

pg (node-postgres) — наиболее широко используемый npm-пакет для подключения приложений Node.js к базам данных PostgreSQL, предоставляющий как простой Client для одиночных соединений, так и Pool для пула соединений, подходящего для продакшн-серверной разработки. Драйвер pg взаимодействует с PostgreSQL по нативному wire-протоколу и поддерживает параметризованные запросы (client.query('SELECT * FROM users WHERE id = $1', [id])), которые необходимы для защиты от SQL-инъекций в сервисах Node.js. Пул соединений через pg.Pool управляет настраиваемым количеством переиспользуемых PostgreSQL-соединений, значительно снижая накладные расходы по сравнению с созданием нового соединения на каждый запрос — это критически важная оптимизация производительности для высококонкурентных приложений Node.js. В TypeScript-проектах pg используется совместно с пакетом @types/pg для деклараций типов, а ORM более высокого уровня, такие как prisma и drizzle-orm, используют pg или его варианты в качестве нижележащего транспорта PostgreSQL. Npm-пакет pg также поддерживает соединения через Unix-сокет, SSL-сертификаты и каналы уведомлений Postgres через LISTEN/NOTIFY, что делает его пригодным для широкого круга серверных задач Node.js.

Как это работает

node-postgres (pg) использует driver-библиотеки: pg — для PostgreSQL, mysql2 — для MySQL, better-sqlite3 — для SQLite (sync API, быстрый), mongodb — для MongoDB, redis/ioredis — для Redis. ORM сверху: Prisma (TypeScript-first, schema-based), Drizzle (TS-типизированный SQL DSL), Sequelize (зрелый классический), TypeORM (декораторный). Connection pooling важен в production — никогда не открывайте соединение на запрос без pool.

Когда применять

Prisma или Drizzle — для новых TypeScript-проектов: type-safety + миграции чисто интегрированы. Сырой pg + SQL — когда запросы тонко настроены или ORM мешает. SQLite (better-sqlite3) — для маленьких single-host приложений и embedded; удивительно мощный, проще в эксплуатации. Миграции всегда через тул (Prisma migrate, drizzle-kit, knex); не правьте production-схему руками.

Типичные ошибки

Ловушки node-postgres (pg): SQL-инъекции из конкатенации строк (параметризованные запросы — есть у каждого драйвера); утечка соединений (важны размер pool + idle timeout); N+1 запросов от наивного ORM (eager-load явно); транзакции, оставленные открытыми из-за early return (async + try/finally); долгие запросы держат row-локи. Slow-query логирование — с самого начала.

Связанные понятия

Полезные ресурсы