Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi PostgresQL: SELECT wird in einer Transaction unterdrückt (https://www.delphipraxis.net/100513-postgresql-select-wird-einer-transaction-unterdrueckt.html)

alzaimar 29. Sep 2007 09:50

Datenbank: PostgreSQL • Version: 8.2. • Zugriff über: egal

PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hi

Ich spiel grad mit Postgres herum:

SQL-Code:
begin transaction;
insert into test (name) values ('Foo');
select * from test;
rollback transaction;
Ich erwarte irgend eine Ergebnismenge. Leider kommt stattdessen
Zitat:

Zitat von pgAdmin III Query
Abfrageergebnis mit 3 Zeilen wurde unterdrückt.

Abfrage war erfolgreich nach 20 ms. Keine Zeilen geliefert.

Man muss doch einstellen können, das man das Ergebnis sehen will, auch wenn es nicht commited wird, oder?

Kann mir jemand verraten, wie man das einstellt?

marabu 29. Sep 2007 10:16

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hallo alzaimar,

was passiert eigentlich, wenn du COMMIT statt ROLLBACK verwendest?

Freundliche Grüße

Bernhard Geyer 29. Sep 2007 10:53

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Wo führst du die Anweisungen aus (Delphi-Komponente) bzw. mit welchen Methoden (Bei Delphi-Kompos: Open bzw. ExecSQL)?

marabu 29. Sep 2007 11:44

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hallo Bernhard,

ich weiß jetzt nicht wie ich drauf komme, aber ich glaube alzaimar verwendet pgAdmin3 und keine Komponenten - ich kann mich aber auch täuschen.

Freundliche Grüße

alzaimar 29. Sep 2007 12:08

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hallo marabu, Hallo Bernhard,

Bei einem 'Commit' passiert das Gleiche (natürlich wird die Zeile eingefügt), aber die Anzeige wird unterdrückt... :gruebel:

marabu 29. Sep 2007 13:32

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hallo alzaimar,

INSERT fügt einen (wahrscheinlich den allerersten) Datensatz in die Tabelle TEST ein, SELECT baut innerhalb der Transaction einen Cursor, dessen einziger Datensatz noch nicht committed wurde. Postgres arbeitet mit READ COMMITTED. Der mit SELECT aufgesetzte Cursor darf den gefundenen Datensatz nicht zeigen, deshalb "result with 1 rows discarded". Ein COMMIT nach dem INSERT und die Meldung sollte verschwinden.

Freundliche Grüße

alzaimar 29. Sep 2007 15:08

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hallo marabu,

Die Tabelle ist bereits befüllt.

Ich verwende die Technik der Transaktionskapselung mit einem Rollback, um SQL-Skripte zu testen, ohne die Daten dabei zu verändern. Das funktioniert unter MSSQL einwandfrei, nur mit Postgres scheint es Probleme zu geben.

Bernhard Geyer 29. Sep 2007 15:18

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Zitat:

Zitat von alzaimar
Ich verwende die Technik der Transaktionskapselung mit einem Rollback, um SQL-Skripte zu testen, ohne die Daten dabei zu verändern. Das funktioniert unter MSSQL einwandfrei, nur mit Postgres scheint es Probleme zu geben.

Ich vermute eher das verwendete Tool hat damit Probleme bei mehreren Anweisungen in einem Rutsch zu erkennen das die nach einem Insert-Statement folgende Select-Anweisung einen Result-Curser liefert.
Probier mal die Anweisungen einzeln Auszuführen. Die Transaktion ist ja an deine Connection gebunden und solange das Tool nicht nach jeder Anweisung die Verbindung trennt bekommst du das gleiche Ergebnis.

Dax 29. Sep 2007 15:20

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Ein Rollback beendet die Transaktion und verwirft implizit alle Ergebnisse der Transaktion. Wenn du das Rollback auslässt, bleibt das Ergebnis das selbe (die Transaktion wird einem Rollback unterzogen, da kein Commit auftrat), aber du wirst deine Ergebnismenge zu gesicht bekommen.

alzaimar 29. Sep 2007 18:53

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Zitat:

Zitat von Bernhard Geyer
Ich vermute eher das verwendete Tool hat damit Probleme bei mehreren Anweisungen in einem Rutsch zu erkennen

Deine Vermutung ist richtig: 2x SELECT hintereinander bringt das gleiche Ergebnis 'Anzeige wurde unterdrückt'.

Zitat:

Zitat von Dax
....die Transaktion wird einem Rollback unterzogen, da kein Commit auftrat), ...

Nein, leider nicht Die Transaktion ist noch offen. Ich muss also zum Schluss ein explizites Rollback getrennt ausführem.

Fazit: Ich benötige ein Postgres-Query-Tool, das mehrere Ergebnismengen anzeigen kann. Na, zur not eben selbst schreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz