Оператор отката DML в pgAdmin

В pgAdmin, если я выполняю запрос на вставку, я не вижу никакого способа ни зафиксировать, ни откатить оператор, который я только что выполнил (я знаю, что он автоматически фиксируется). Я привык к разработчикам Oracle и SQL, где я мог запустить оператор, а затем откатить последний оператор, который я выполнил, одним нажатием кнопки. Как бы мне добиться того же здесь?


person chrismarx    schedule 29.03.2012    source источник


Ответы (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 
person Frank Heikens    schedule 29.03.2012
comment
хм, если я делаю вставку между началом и откатом, должен ли я ожидать, что postgres сможет увидеть изменения в данных таблицы? или это не поддерживается? - person chrismarx; 30.03.2012
comment
Конечно поддерживается, это нормальное поведение базы данных. - person Frank Heikens; 30.03.2012

Я также ОЧЕНЬ предпочитаю, чтобы Oracle автоматически помещал все в транзакцию, чтобы избежать катастрофических ручных ошибок.

Включение автоматической фиксации по умолчанию в продукте Enterprise, IMO, выходит за рамки порочного и ничего, кроме СОВЕРШЕННО, СОВЕРШЕННО БЕЗУМНОГО выбор дизайна :(

В любом случае --- работая с Postgres, всегда нужно помнить

НАЧАТЬ;

при запуске ручной работы или sql-скриптов.

Практическая привычка: тогда, когда вы скажете: COMMIT; в Oracle, я использую строку

КОНЕЦ; НАЧАТЬ;

в Postgres, который делает то же самое, то есть фиксирует текущую транзакцию и сразу же запускает новую.


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

...
Connection dbConn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
dbConn.setAutoCommit(false);
...

чтобы убедиться, что для каждого соединения отключена автоматическая фиксация.

person Rop    schedule 16.07.2013

Если вы используете pgAdmin4, вы можете включать и выключать автоматическую фиксацию и/или автоматический откат.

Перейдите в раскрывающееся меню «Файл» и выберите параметр «Настройки». На вкладке редактора SQL -> Параметры вы можете увидеть параметры для включения и выключения автоматической фиксации/отката.

Автоматическая фиксация/откат

person Stefan Spasojcevic    schedule 11.07.2018
comment
Это отвечает на вопрос, но я отказался от pgadmin. V4 просто ужасен, и пользователи postgres повсюду ищут лучшую альтернативу. Я остановился на dbeaver — dbeaver.com - person chrismarx; 13.07.2018