在postgres中支持什么是事务性的

时间:2011-06-10 08:54:48

标签: postgresql transactions

我正在尝试找出postgres在事务内部可以安全处理的内容,但我找不到postgres manual中的相关信息。到目前为止,我发现了以下内容:

  • UPDATEINSERTDELTE在交易中得到完全支持,并在交易未完成时回滚
  • DROP TABLE未在事务中安全处理,并且使用CREATE TABLE撤消,因此重新创建已删除的表,但不会重新填充它
  • CREATE TABLE也不是真正的事务处理,而是使用相应的DROP TABLE撤消

这是对的吗?另外,我找不到有关处理ALTER TABLETRUNCATE的任何提示。这些处理方式在交易中是否安全?不同类型的交易和不同版本的postgres之间的处理有区别吗?

2 个答案:

答案 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。)

请参阅concurrency controltransaction-related commands上的手册。