Delphi-PRAXiS

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.

mikhal 30. Sep 2007 10:43

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Lade dir mal den EMS SQL Manager für PostgreSQL in der kostenfreien Lite Version herunter. Ich habe damit recht gute Erfahrungen gemacht, als ich mich letztes Jahr mit PostgreSQL auseinandersetzen mußte.

Grüße
Mikhal

alzaimar 30. Sep 2007 10:52

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

Danke, teste ich gleich.

Jelly 30. Sep 2007 10:56

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
In MSSQL gibts sowas wie with (nolock),
also:
SQL-Code:
select * from Tabelle with(nolock)
Vielleicht gibts was Äquivalentes unter Postgres

alzaimar 30. Sep 2007 12:06

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hi Jelly,

Ich glaube, Du hast mein Problem nicht verstanden. Ich verwende MSSQL, und da debugge ich irgendein Skript, indem ich Kontrollausgaben einfüge und das Ganze dann mit einem 'Begin... Rollback' kapsele. Ich bekomme also reproduzierbare Ergebnisse, da sich ja die DB nicht verändert.

Nun suche ich nach einer Freeware-Alternative zu MSSQL. Natürlich gibt es die Express-Version von MSSQL, aber meinen Kunden ist die zu leichtgewichtig.

Nun habe ich mir Postgres gezogen und will damit mal rumspielen. Das Erste, was ich probiert habe, war natürlich gleich das hier Erwähnte. Das bei der Installation mitgelieferte pgAdmin ist zwar nett, scheitert aber offensichtlich an meiner Aufgabenstellung.

Der von mikhal vorgeschlagene EMS-Manager (In Delphi geschrieben? Verwendet jedenfalls DevExpress + Fastreport :stupid: ) kann das: Nach Einstellung einer Option stellt der EMS-Manager die Resultsets zumindest in eigenen Grids (per PageControl getrennt) dar. Das ist fast so gut wie der T-SQL-Analyzer von MS.

Ich habe kein Problem mit dem Preis: 450 Steine für das Rundum-Sorglos-Paket sind ein Witz, wenn man sich die Funktionsvielfalt anschaut.

Dax 30. Sep 2007 12:08

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Was du noch tun könntest, wäre eine temporäre Tabelle pro Query und SELECT ... INTO... Naja, das ist auch alles andere als optimal :(

mikhal 30. Sep 2007 12:17

Re: PostgresQL: SELECT wird in einer Transaction unterdrückt
 
Hast du dir für deine Tests auch mal die Zugriffskomponenten von Microolap angesehen?

PostgresDAC

Die habe ich mir letztes Jahr angetan, waren für PostgreSQL das Beste was ich zu einem akzeptablen Preis finden konnte.


Grüße
Mikhal


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.

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