Расскажи про опыт работы с PostgreSQL

«Расскажи про опыт работы с PostgreSQL» — вопрос из категории Базы данных, который задают на 40% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Node.js-проектах я активно использовал PostgreSQL, преимущественно с драйвером pg (node-postgres) и ORM Sequelize. Основные задачи включали проектирование схемы, оптимизацию запросов и обеспечение целостности данных.

Пример подключения и запроса с pg:

const { Pool } = require('pg');
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: { rejectUnauthorized: false }
});

async function getActiveUsers() {
  const query = 'SELECT id, email FROM users WHERE is_active = $1 AND created_at > $2';
  const values = [true, new Date('2023-01-01')];
  const { rows } = await pool.query(query, values);
  return rows;
}

Ключевые практики в моем опыте:

  • Транзакции: Использование BEGIN, COMMIT, ROLLBACK через pool.query для атомарности операций, например, при регистрации пользователя с созданием связанных записей в нескольких таблицах.
  • JSONB: Хранение динамических конфигураций или метаданных в полях типа JSONB с использованием индексов GIN для эффективного поиска.
  • Connection Pooling: Настройка пула соединений в pg для управления нагрузкой и избежания переподключений.
  • Сложные запросы: Часто применял CTE (Common Table Expressions) для читаемых многоступенчатых запросов и оконные функции для аналитики (например, ROW_NUMBER(), LAG()).
  • Миграции: Использовал инструменты вроде node-pg-migrate или миграции в Sequelize для контроля версий схемы БД.