Ich arbeite in einer Java-Anwendung, wo ich diese beiden Abfragen (als Strings in Java) gleichzeitig ausführen und die Transaktion zurücksetzen muss, wenn es Fehler gab.Mehrere Abfragen als eine dblink-Transaktion ausführen
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
habe ich einen String mit den beiden mit ;
wie in den Kommentaren getrennt Abfragen vorschlagen
UPDATE
Ich habe als Code atomare Transaktionen versucht JDBC in Java. Ich erzwinge den zweiten SQL-Fehler, aber selbst wenn ich .setAutoCommit (false); Der dblink hat die andere Datenbank mit der ersten Abfrage beeinflusst. Ich habe den gleichen Code mit NO dblink Transaktionen versucht und der Rollback funktioniert gut. dblink ist das Problem.
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;
}
}
}
Vielen Dank für Ihre Hilfe.
JDBC atomare Transaktionen über Chargen gibt: https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html –
@EricN ich verstehen, aber es funktioniert nicht mit bdlink –
Haben Sie versucht, das Senden beide Anweisungen (getrennt durch ein ';') mit einem einzigen Aufruf von 'dblink_exec()' –