Что поддерживается как транзакционный в postgres - PullRequest
6 голосов
/ 10 июня 2011

Я пытаюсь выяснить, что postgres может безопасно обрабатывать внутри транзакции, но я не могу найти соответствующую информацию в руководстве postgres .До сих пор я обнаружил следующее:

  • UPDATE, INSERT и DELTE полностью поддерживаются внутри транзакций и откатываются, когда транзакция не завершена
  • DROP TABLE не обрабатывается безопасно внутри транзакции и отменяется с помощью CREATE TABLE, таким образом воссоздает удаленную таблицу, но не заполняет ее
  • CREATE TABLE также не является действительно транзакцией и вместо этого отменяется соответствующейDROP TABLE

Это правильно?Также я не смог найти никаких подсказок относительно обработки ALTER TABLE и TRUNCATE.Как они обрабатываются и находятся ли они в безопасности внутри транзакций?Есть ли разница в обработке между разными типами транзакций и разными версиями postgres?

Ответы [ 2 ]

6 голосов
/ 10 июня 2011

DROP TABLE является транзакционным. Чтобы отменить это, вам нужно выдать ROLLBACK, а не CREATE TABLE. То же самое касается CREATE TABLE (который также отменяется с помощью ROLLBACK).

ROLLBACK - это всегда единственный правильный способ отменить транзакцию, включая ALTER TABLE и TRUNCATE.

Единственное, что никогда не является транзакционным в Postgres, это числа, сгенерированные последовательностью (сами CREATE / ALTER / DROP SEQUENCE являются транзакционными).

4 голосов
/ 10 июня 2011

Лучше всего я знаю, что все эти команды поддерживают транзакции, за исключением TRUNCATE ... RESTART IDENTITY (и даже эта команда является транзакционной с 9.1 .)

См. Руководство по управление параллелизмом и команды, связанные с транзакциями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...