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

eyh26e7m  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(7)|浏览(208)

例如,我如何测试UPDATE语句以查看它是否工作,例如,它是否实际更新行等?
有什么方法可以很容易地模拟它吗?

xjreopfe

xjreopfe1#

使用transaction Package 您的update语句和select查询(以测试更新),然后总是回滚它。
示例:

BEGIN;

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

SELECT balance FROM accounts WHERE name = 'Alice';

ROLLBACK; -- << Important! Un-does your UPDATE statement above!

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

55ooxyrt

55ooxyrt2#

将其 Package 在transaction中,使用SELECT测试结果,并在最后回滚。

BEGIN;

UPDATE ...;

SELECT ...;

ROLLBACK;
e0bqpujr

e0bqpujr3#

在你的SQL UPDATE命令前面加上EXPLAIN [ ref ],它会告诉你有多少行会受到你的命令的影响,而且它不会执行实际的更新。
这比在事务中 Package 命令简单得多。例如:

EXPLAIN UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Alice';
ctzwtxfj

ctzwtxfj4#

您总是可以在SQLFiddle上构建一个示例数据库,并在那里尝试您的update语句。
充分披露:我是www.example.com的作者sqlfiddle.com

kuhbmx9i

kuhbmx9i5#

在Postgres中,您可以使用UPDATE子句 RETURNING 来显示哪些行已经被修改。

-- example data
CREATE TABLE data(id int, text text);
INSERT INTO DATA VALUES(1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd');

-- original data
SELECT * from data;

-- dry-run update
BEGIN;

UPDATE
  data
SET
  text = 'modified'
WHERE
  id > 2
RETURNING
  id, text;

ROLLBACK;

-- data after dry-run update
SELECT * from data;
vojdkbi0

vojdkbi06#

首先使用SELECT语句运行相同的检查:SELECT返回的行将是UPDATE修改的行

oo7oh9g9

oo7oh9g97#

给出以下简单更新:

UPDATE Products
   SET price_including_vat = price * 1.05
 WHERE product_type = 'Food';

我会用这样的东西来测试它:

SELECT price_including_vat AS price_including_vat__before, 
        price * 1.05 AS price_including_vat__after, 
        *
   FROM Products
 WHERE product_type = 'Food';

实际上,我可能会用大脑来做这样的分析:

WITH updated AS 
   (
    SELECT price_including_vat AS price_including_vat__before, 
           price * 1.05 AS price_including_vat__after, 
           *
      FROM Products
    WHERE product_type = 'Food'
   )
SELECT * 
  FROM updated
 WHERE price_including_vat__before = price_including_vat__after;

相关问题