TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.7K subscribers
Post #1778 1.48K
Подготовленные выражения и подготовленные транзакции — это полностью разные возможности Postgres, которые совпадают только по слову в названии. Одна используется широко и безопасна. Вторая применяется редко и при неправильном управлении может приводить к простоям.

Начнём с безопасной:
Подготовленные выражения (PREPARE / EXECUTE)

Часто используемая функция оптимизации запросов. SQL-выражение парсится один раз, затем выполняется много раз с разными параметрами. Снижает накладные расходы на парсинг и иногда на построение плана выполнения:

PREPARE find_user (text) AS 
SELECT * FROM users WHERE email = $1;

EXECUTE find_user('alice@example.com');
EXECUTE find_user('bob@example.com');

DEALLOCATE find_user;


• Живёт в пределах одной сессии
• Хранится в памяти, без долговременного хранения
• Безопасно при «забывании»
• Видно через SELECT * FROM pg_prepared_statements
• Используется большинством фреймворков, ORM и библиотек для оптимизации
Подготовленные транзакции (PREPARE TRANSACTION / COMMIT PREPARED)
Большинству приложений эта функциональность не нужна.
Это реализация Postgres двухфазного коммита (2PC / XA транзакции). Транзакция переводится в состояние «готова к фиксации», фиксируется на диске, а завершение выполняется позже из другой сессии:

BEGIN;
INSERT INTO orders VALUES (1, 'widget', 99);
PREPARE TRANSACTION 'order_txn_abc123';

-- позже
COMMIT PREPARED 'order_txn_abc123';
-- или: ROLLBACK PREPARED 'order_txn_abc123';


• Переживает падения и перезапуски (запись в pg_twophase/ внутри каталога)
• Держит блокировки до завершения
• Удерживает идентификатор транзакции (XID) и блокирует автоочистку (vacuum)
• Блокирует DDL-операции над затронутыми таблицами
• Требует max_prepared_transactions > 0 (по умолчанию 0 — одно из удачных значений по умолчанию)

👉 @SQLPortal
  • 👍 4
More from @sqlportal
  1. Oct 11, 2026Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны х…
  2. Oct 11, 2026SQL: порядок написания ≠ порядок обработки Запрос начинается с SELECT, но логически обраба…
  3. Oct 10, 2026Какие навыки нужны дата-инженеру? В вакансиях прослеживается закономерность: на первом мес…
  4. Oct 10, 2026Бэкап есть? А если найду? 😳 👉 @SQLPortal
  5. Oct 9, 2026Горизонтальные или вертикальные столбцы: что выбрать? Оба варианта помогают сравнивать кат…
  6. Oct 9, 2026Оконные функции SQL: аналитика без потери отдельных строк В отличие от GROUP BY, оконные ф…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →