如何在PostgreSQL中测试运行UPDATE语句?

use*_*863 45 sql database postgresql

我如何测试UPDATE语句以查看它是否可行,例如它是否实际更新行等?

有没有办法轻松模拟它?

Pau*_*sik 70

使用事务来包装更新语句和选择查询(以测试更新),然后始终将其回滚.

例:

BEGIN;

UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';

SELECT accounts WHERE name = 'Alice';

ROLLBACK; -- << Important! Un-does your UPDATE statement above!
Run Code Online (Sandbox Code Playgroud)

事务通常以提交结束,但由于您只是在测试并且不希望更改是永久性的,因此您只需回滚即可.


Joe*_*lli 37

将其包装在事务中,使用SELECT测试结果并在结尾处回滚.

BEGIN;

UPDATE ...;

SELECT ...;

ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

  • 您可以在UPDATE查询中使用RETURNING来跳过SELECT查询. (6认同)
  • 如果您决定保留更改,请使用`COMMIT`而不是`ROLLBACK`. (4认同)

Tho*_*rge 32

UPDATE在 SQL命令前面加上EXPLAIN[ ref ],它将不会执行实际的更新。例如:

EXPLAIN UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Alice';
Run Code Online (Sandbox Code Playgroud)

它不会(总是)告诉您将更新的行数,而是告诉您有多少行与子句匹配WHERE。在上面的例子中,这些数字是相同的。

您可以参考 Paul Sasik 的回滚方法的回答。

  • “它会告诉你有多少行将受到你的命令的影响” - 我不认为这是真的;它只是告诉您它将扫描多少行。 (4认同)

Jak*_*sel 5

您始终可以在SQL Fiddle上构建示例数据库并在那里尝试更新语句。

完全披露:我是 sqlfiddle.com 的作者