【问题标题】:Postgres: test insert or update before doing it?Postgres:在执行之前测试插入或更新?
【发布时间】:2014-01-15 16:36:07
【问题描述】:

我们有一个表,它只包含一个特定类型的条目,所以如果我们收到插入请求,我们会删除所有内容,然后执行插入。插入来自用户数据,并且有时会引发错误(也许他们没有填写某些内容等),我们最终会得到一堆已删除的数据。我们正在处理所有数据处理,所以我们不再有这样的错误,但我想知道:

有没有办法在实际执行之前测试插入或更新以查看它是否可以工作?

【问题讨论】:

  • 听起来你应该使用数据库事务:错误回滚,成功提交。
  • 这是完美的。谢谢。

标签: python postgresql testing transactions rollback


【解决方案1】:

打开一个会话并在 transaction 中执行所有操作:

BEGIN;
INSERT ...

-- check if it worked
ROLLBACK;

一切都会回滚。但是,一些可能的副作用:增加的序列不会被重置。像dblink() 这样的一些函数不能回滚。普通的INSERTUPDATE 是安全的。请注意,只要您的事务处于打开状态,您就可能会锁定行。

但是,如果您使用有价值的数据进行操作,则不应那样玩弄它。创建数据库副本以供测试。

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 2017-03-28
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多