В pgAdmin, если я выполняю запрос на вставку, я не вижу никакого способа ни зафиксировать, ни откатить оператор, который я только что выполнил (я знаю, что он автоматически фиксируется). Я привык к разработчикам Oracle и SQL, где я мог запустить оператор, а затем откатить последний оператор, который я выполнил, одним нажатием кнопки. Как бы мне добиться того же здесь?
Оператор отката DML в pgAdmin
Ответы (3)
Использовать транзакцию в окне SQL:
BEGIN;
DROP TABLE foo;
ROLLBACK; -- or COMMIT;
-- редактировать -- Другой пример:
BEGIN;
INSERT INTO foo(bar) VALUES ('baz') RETURNING bar; -- the results will be returned
SELECT * FROM other_table; -- some more result
UPDATE other_table SET var = 'bla' WHERE id = 1 RETURNING *; -- the results will be returned
-- and when you're done with all statements and have seen the results:
ROLLBACK; -- or COMMIT
Я также ОЧЕНЬ предпочитаю, чтобы Oracle автоматически помещал все в транзакцию, чтобы избежать катастрофических ручных ошибок.
Включение автоматической фиксации по умолчанию в продукте Enterprise, IMO, выходит за рамки порочного и ничего, кроме СОВЕРШЕННО, СОВЕРШЕННО БЕЗУМНОГО выбор дизайна :(
В любом случае --- работая с Postgres, всегда нужно помнить
НАЧАТЬ;
при запуске ручной работы или sql-скриптов.
Практическая привычка: тогда, когда вы скажете: COMMIT; в Oracle, я использую строку
КОНЕЦ; НАЧАТЬ;
в Postgres, который делает то же самое, то есть фиксирует текущую транзакцию и сразу же запускает новую.
При использовании JDBC или аналогичного для создания соединения всегда используйте какой-либо метод, например. getPGConnection(), который включает в себя:
...
Connection dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
dbConn.setAutoCommit(false);
...
чтобы убедиться, что для каждого соединения отключена автоматическая фиксация.
Если вы используете pgAdmin4, вы можете включать и выключать автоматическую фиксацию и/или автоматический откат.
Перейдите в раскрывающееся меню «Файл» и выберите параметр «Настройки». На вкладке редактора SQL -> Параметры вы можете увидеть параметры для включения и выключения автоматической фиксации/отката.