【问题标题】:What is supported as transactional in postgres在 postgres 中支持事务性的内容
【发布时间】:2011-09-12 08:16:09
【问题描述】:

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

  • 事务内部完全支持UPDATEINSERTDELTE,并在事务未完成时回滚
  • DROP TABLE 没有在事务中安全处理,并被 CREATE TABLE 撤消,因此重新创建删除的表但不重新填充它
  • CREATE TABLE 也不是真正的事务化,而是使用相应的 DROP TABLE 撤消

这是正确的吗?我也找不到关于处理ALTER TABLETRUNCATE 的任何提示。这些以什么方式处理,它们在交易中是否安全?不同类型的事务和不同版本的postgres的处理方式有区别吗?

【问题讨论】:

    标签: postgresql transactions


    【解决方案1】:

    我知道所有这些命令都是事务感知的,除了TRUNCATE ... RESTART IDENTITY(甚至那个是事务性的since 9.1。)

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

    【讨论】:

      【解决方案2】:

      DROP TABLE 事务性的。要撤消此操作,您需要发出 ROLLBACK 而不是 CREATE TABLECREATE TABLE 也是如此(也可以使用 ROLLBACK 撤消)。

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

      在 Postgres 中唯一不具有事务性的是序列生成的数字(CREATE/ALTER/DROP SEQUENCE 本身事务性的)。

      【讨论】:

      • 是的,我的意思是内部处理的方式......我猜我只是被this question的一些答案弄糊涂了
      • @LiKao:链接问题中的答案并没有专门谈论PostgreSQL。对于不支持事务 DDL 的 DBMS,确实不能仅由 CREATE TABLE “回滚” DROP TABLE。
      猜你喜欢
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多