2011-06-10 60 views
5

我想知道postgres可以在事务内部安全地处理什么,但是我找不到postgres manual中的相关信息。到目前为止,我已经找到了以下工作:在postgres中支持什么事务

  • UPDATEINSERTDELTE完全支持内部交易和回滚时,交易未完成
  • DROP TABLE是不是一个事务内部安全处理,并撤消与一个CREATE TABLE,从而重新创建删除的表,但不重新填充
  • CREATE TABLE也没有真正transactionized,并与相应的DROP TABLE
0而不是撤消

这是正确的吗?此外,我无法找到有关处理ALTER TABLETRUNCATE的提示。这些交易以什么方式处理,并且在交易中是否安全?不同类型的交易和不同版本的postgres之间的处理有什么不同?

回答

6

DROP TABLE交易。为了解决这个问题,你需要发出一个ROLLBACK而不是CREATE TABLE。这同样适用于CREATE TABLE(这也是使用ROLLBACK撤消的)。

ROLLBACK始终是撤消事务的唯一正确方法 - 包括ALTER TABLE和TRUNCATE。

在Postgres中永远不会事务性的唯一的事情是由序列生成的数字(CREATE/ALTER/DROP SEQUENCE本身虽然是事务性的)。

+0

是的,我的意思是它在内部处理的方式...猜猜我只是被一些[这个问题]的答案困惑(http://stackoverflow.com/questions/4692690/is-it-possible-to- roll-back-create-table-and-alter-table-statements-in-major-sql) – LiKao 2011-06-10 13:39:34

+0

@LiKao:链接问题中的答案没有专门讨论PostgreSQL。对于不支持事务性DDL的DBMS来说,DROP TABLE不仅可以通过CREATE TABLE“回滚”,这是事实。 – 2011-06-10 13:40:57