我正在尝试找出postgres在事务内部可以安全处理的内容,但我找不到postgres manual中的相关信息。到目前为止,我发现了以下内容:
UPDATE
,INSERT
和DELTE
在交易中得到完全支持,并在交易未完成时回滚DROP TABLE
未在事务中安全处理,并且使用CREATE TABLE
撤消,因此重新创建已删除的表,但不会重新填充它CREATE TABLE
也不是真正的事务处理,而是使用相应的DROP TABLE
撤消这是对的吗?另外,我找不到有关处理ALTER TABLE
和TRUNCATE
的任何提示。这些处理方式在交易中是否安全?不同类型的交易和不同版本的postgres之间的处理有区别吗?
答案 0 :(得分:6)
DROP TABLE
是交易性的。要撤消此操作,您需要发出ROLLBACK
而不是CREATE TABLE
。同样适用于CREATE TABLE
(使用ROLLBACK也可以撤消)。
ROLLBACK
始终是撤消事务的唯一正确方法 - 包括ALTER TABLE和TRUNCATE。
Postgres中唯一永远不会交易的是序列生成的数字(CREATE / ALTER / DROP SEQUENCE本身 是事务性的)。
答案 1 :(得分:4)
最好我知道所有这些命令都是事务感知的,但TRUNCATE ... RESTART IDENTITY
除外(甚至那个命令是事务since 9.1。)