[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-kak-rabotayut-tranzaktsii-v-postgresql":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},944,"kak-rabotayut-tranzaktsii-v-postgresql",28,"postgresql","PostgreSQL","🐘","Как работают транзакции в PostgreSQL?","Транзакция — это последовательность операций, выполняемых как единое целое и удовлетворяющих свойствам ACID. В PostgreSQL каждый отдельный оператор — это неявная транзакция (autocommit), а для объединения нескольких операций используется `BEGIN ... COMMIT\u002FROLLBACK`.\n\n### Свойства ACID\n\n- **Atomicity (атомарность)** — транзакция либо выполняется полностью, либо не выполняется совсем\n- **Consistency (согласованность)** — транзакция переводит БД из одного согласованного состояния в другое\n- **Isolation (изолированность)** — параллельные транзакции не влияют друг на друга\n- **Durability (долговечность)** — результат зафиксированной транзакции сохраняется даже при сбое\n\n\u003Cdetails>\u003Csummary>Примеры работы с транзакциями\u003C\u002Fsummary>\n\n```sql\n-- Явная транзакция\nBEGIN;\nUPDATE accounts SET balance = balance - 1000 WHERE id = 1;\nUPDATE accounts SET balance = balance + 1000 WHERE id = 2;\nCOMMIT;\n\n-- Откат\nBEGIN;\nUPDATE accounts SET balance = balance - 1000 WHERE id = 1;\n-- Что-то пошло не так\nROLLBACK;\n\n-- Точки сохранения (savepoints)\nBEGIN;\nUPDATE accounts SET balance = balance - 1000 WHERE id = 1;\nSAVEPOINT sp1;\nUPDATE accounts SET balance = balance + 1000 WHERE id = 2;\n-- Ошибка — откатываем до savepoint\nROLLBACK TO sp1;\n-- Продолжаем с другой логикой\nUPDATE accounts SET balance = balance + 1000 WHERE id = 3;\nCOMMIT;\n```\n\n\u003C\u002Fdetails>\n\n### Использование из Java\u002FSpring\n\n```java\n@Transactional\npublic void transfer(Long fromId, Long toId, BigDecimal amount) {\n    accountRepository.debit(fromId, amount);\n    accountRepository.credit(toId, amount);\n    \u002F\u002F при исключении — автоматический ROLLBACK\n}\n```\n\n> **На собеседовании:** не забудьте упомянуть autocommit: каждый отдельный SELECT\u002FINSERT — это неявная транзакция. SAVEPOINT — продвинутый ответ, показывающий глубину знаний: позволяет откатить часть транзакции без полного ROLLBACK.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как работают транзакции в PostgreSQL? — Gymterview","Транзакция — это последовательность операций, выполняемых как единое целое и удовлетворяющих свойствам ACID. В PostgreSQL каждый отдельный оператор — это неявна","Транзакция — это последовательность операций, выполняемых как единое целое и удовлетворяющих свойствам ACID. В PostgreSQ",[7,13],"Транзакция — это последовательность операций, выполняемых как единое целое и удовлетворяющих свойствам ACID. В PostgreSQL каждый отдельный оператор — это неявная транзакция (autocommit), а для объединения нескольких операций используется `BEGIN ... COMMIT\u002FROLLBACK`.",true]