Ответ
Я активно использовал PostgreSQL в нескольких production-проектах для хранения структурированных данных, от сырых логов до агрегированных витрин для аналитики и ML-признаков.
Ключевые задачи и примеры:
- Проектирование и оптимизация схемы: Работал с нормализованными схемами, создавал индексы (B-tree, GIN для полнотекстового поиска) для ускорения частых запросов.
- Сложные аналитические запросы: Регулярно использовал оконные функции (Window Functions) и CTE (Common Table Expressions) для расчетов.
-- Пример: Расчет скользящего среднего чека по пользователям за последние 7 дней
WITH user_daily_spend AS (
SELECT
user_id,
date,
SUM(amount) as daily_total
FROM transactions
GROUP BY user_id, date
)
SELECT
user_id,
date,
daily_total,
AVG(daily_total) OVER (
PARTITION BY user_id
ORDER BY date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS avg_spend_last_7_days
FROM user_daily_spend
ORDER BY user_id, date;
- Интеграция с Python-пайплайнами: Использовал
psycopg2иSQLAlchemyдля выгрузки данных в Pandas DataFrame и загрузки результатов работы моделей обратно в БД.
import pandas as pd
import psycopg2
from sqlalchemy import create_engine
# Подключение и выгрузка данных для обучения
engine = create_engine('postgresql://user:pass@localhost/db')
query = "SELECT * FROM features WHERE partition = 'train'"
df_train = pd.read_sql(query, engine)
# ... обработка и обучение модели ...
# Загрузка предсказаний обратно в отдельную таблицу
df_predictions.to_sql('model_predictions', engine, if_exists='append', index=False)
- Администрирование (базовое): Настройка репликации для отказоустойчивости, мониторинг длительных запросов через
pg_stat_activity, планирование задач с помощьюpg_cron.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶