← Назад к вопросам
Что такое хранимые процедуры в БД?
2.0 Middle🔥 201 комментариев
#Базы данных (NoSQL)
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Хранимые процедуры в БД
Хранимая процедура — это предкомпилированная программа, которая хранится в БД и выполняется на сервере БД. Это набор SQL-команд и логики, которые можно вызвать из приложения одной командой.
Основные характеристики
- Хранятся в БД — код находится на сервере, не передается по сети
- Предкомпилированы — синтаксис проверяется заранее, выполнение быстрее
- Переиспользуемы — можно вызвать из разных приложений
- Принимают параметры — работают с переменными
- Возвращают результаты — могут возвращать наборы данных или скалярные значения
Пример создания хранимой процедуры в PostgreSQL
CREATE OR REPLACE FUNCTION get_user_orders(user_id INT)
RETURNS TABLE (order_id INT, order_date DATE, total NUMERIC) AS $$
BEGIN
RETURN QUERY
SELECT o.id, o.created_at, o.total_sum
FROM orders o
WHERE o.user_id = $1
ORDER BY o.created_at DESC;
END;
$$ LANGUAGE plpgsql;
Как вызвать из Python
import psycopg2
conn = psycopg2.connect("dbname=mydb user=postgres")
cur = conn.cursor()
# Вызов хранимой процедуры
cur.execute("SELECT * FROM get_user_orders(%s)", (user_id,))
orders = cur.fetchall()
for order in orders:
print(f"Order {order[0]}: {order[1]} - {order[2]}")
cur.close()
conn.close()
Плюсы хранимых процедур
- Производительность — код выполняется на сервере БД, минимум передачи данных
- Безопасность — логика закрыта, сложнее делать SQL-injection
- Консистентность — единая точка логики для всех приложений
- Сложная логика — можно реализовать сложные алгоритмы в БД
Минусы хранимых процедур
- Сложность отладки — код на другом языке, требует отдельных инструментов
- Версионирование — сложно отслеживать изменения, требует миграций
- Переносимость — синтаксис разный в разных СУБД (PostgreSQL, MySQL, Oracle)
- Масштабируемость — нельзя масштабировать БД горизонтально так же как приложение
Когда использовать
Хранимые процедуры имеют смысл для:
- Сложных бизнес-логик, которые часто меняются
- Операций, критичных по производительности
- Обеспечения консистентности данных между приложениями
Но в современных архитектурах часто предпочитают ORM и логику в приложении, так как это упрощает разработку, тестирование и масштабирование.