Я работаю в приложении Java, где мне нужно выполнить эти два запроса (как строки в java) одновременно и откат транзакции, если там есть ошибки.Выполнять несколько запросов как одну транзакцию dblink
SELECT dblink_exec('hostaddr=xxx.xx.xxx.xxx port=5432 dbname=bdname user=myuser password=mypass connect_timeout=2',
'INSERT INTO table3(field4)
VALUES (5)') AS result;
SELECT dblink_exec('hostaddr=xxx.xx.xxx.xxx port=5432 dbname=bdname user=myuser password=mypass connect_timeout=2',
'UPDATE table1 SET field2 = field2 + 3.0 WHERE field1 = 16436') AS result;
UPDATE
Я создал одну строку с двумя запросами, разделенных ;
как в комментариях предлагают
UPDATE
Я пытался JDBC атомарных транзакций как код в java. Я заставляю второй sql сбой, но даже если я указываю .setAutoCommit (false); dblink повлиял на другую базу данных с первым запросом. Я пробовал один и тот же код с транзакциями NO dblink, и откат работает хорошо. Проблема dblink.
Java UPDATE
public static boolean ejecutarTransaccionDblink(String sql) {
boolean estado = false;
try {
Statement sentencia = conexion.createStatement();
conexion.setAutoCommit(false);
if (sql.length() != 0) {
if (sentencia.execute(sql)) {
conexion.commit();
estado = true;
}
}
} catch (SQLException ex) {
System.out.println(ex.toString());
try {
estado = false;
conexion.rollback();
} catch (SQLException ex1) {
}
} finally {
try {
conexion.setAutoCommit(true);
return estado;
} catch (SQLException ex) {
return estado;
}
}
}
Спасибо за вашу помощь.
JDBC предоставляет атомарные операции с помощью пакетов: https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html –
@EricN Я понимаю, что, но он не работает с bdlink –
Вы попробуйте отправить оба оператора (разделенные символом ';') одним вызовом 'dblink_exec()' –