Подтвердить что ты не робот

Как протестировать выполнение инструкции UPDATE в PostgreSQL?

Как я могу проверить оператор UPDATE, например, чтобы увидеть, будет ли он работать, например, если он действительно обновит строки и т.д.?

Есть ли способ легко имитировать его?

4b9b3361

Ответ 1

Используйте транзакцию, чтобы обернуть оператор обновления и запрос выбора (для проверки обновления), а затем всегда откатывать его.

Пример:

BEGIN;

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

SELECT accounts WHERE name = 'Alice';

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

Транзакция обычно заканчивается фиксацией, но поскольку вы просто тестируете и не хотите, чтобы изменения были постоянными, вы просто откатитесь.

Ответ 2

Оберните его в transaction, проверьте результаты с помощью SELECT и отката в конце.

BEGIN;

UPDATE ...;

SELECT ...;

ROLLBACK;

Ответ 3

Вы всегда можете создать примерную базу данных SQL Fiddle и попробовать свои инструкции по обновлению там.

Полное раскрытие: я являюсь автором sqlfiddle.com

Ответ 4

Вы можете использовать инструмент, который позволяет легко сделать снимок базы данных и отката. Я рекомендую OffScale - это в основном git для баз данных.

Ответ 5

Запустите ту же проверку с помощью инструкции SELECT: строки, возвращаемые SELECT, будут строками, измененными UPDATE

Ответ 6

Учитывая это простое обновление:

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;

Ответ 7

С 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;