explain analyze anzeigen lassen

Servus,

Ich würde mir gerne das Ergebniss eines “explain” oder “explain analyze” in einem Programm anzeigen lassen.

Dazu habe ich versucht das ergebnis in eine bindvariable auszugeben, was aber leider nicht funktioniert hat. Die Fehlermeldung lautete:

Statement1:

explain analyze SELECT * FROM t_artikel WHERE nartikelkey = '11' into :lsText

Application Programming Error: Too many binds
Reason: The application program is attempting to perform a bind
operation and has exceeded the number of binds necessary.


Statement2:

Select (explain analyze SELECT * FROM t_artikel WHERE nartikelkey = '11' ) into :lsText

PostgreSQL:1No query has been executed with that handle

(lsText ist eine Bindvariable)


Beide varianten funktionieren also nicht…
a) Geht das überhaupt so wie ich das vorhabe?
b) Gibt es denn die möglichkeit die Ausgabe von explain in eine Datei umzuleiten? dann könnte ich ja die auslesen… Wenn ja wie?



2. Frage:
Die Fehlermeldung “PostgreSQL:1No query has been executed with that handle” kommt recht häufig, währen eine “richtige” Fehlermeldung wie bei Statement1 eine Ausnahme ist. Hängt dies mit dem ODBC-Treiber zusammen? Ich vermute das dieser auch für das Errorhandling zuständig ist und in diesem nicht alle Fehlermeldungen implementiert wurden…
Ich verwende PostgreSQL 8.1.5 auf OpenSuse 10.2 und verwende als Client WinXP mit dem ODBC-Treiber der Version “psqlodbc-08_02_0200”

An und für sich ist das, was EXPLAIN auswirft, auch nix anderes als ein normales Result. Ob da Dein ODBC reinspuckt, weiß ich nicht, aber ein simpler Test mit PHP:

$expl_result = pg_exec($db, "explain analyse " . $sql);
for ($i=0; $i < pg_numrows($expl_result); $i++) {
  $expl_array=pg_fetch_array($expl_result, $i);
  echo $expl_array[0];
  echo "<p>";
}

wirft das, was von EXPLAIN kommt, mir in den Browser.


Andreas

Hmmm…
Ich habe das Problem, das ich nur einen Prepare-, einen Execute- und ein Fetchnext-Befehl zur verfügung habe…

immer wenn ich daten möchte, benötige ich eine Bind-Variable. Dies wiederum setzt vorraus, dass ich auch was zurückbekomme…

ist es denn z.B. auf kommandozeilenebene mögliche das ergebnis eines explains (analyze) in eine Datei zu “lenken”?

Dann hole doch das, was EXPLAIN liefert, auf diesem Wege. Anstelle eines ganz regulären SELECT.

ist es denn z.B. auf kommandozeilenebene mögliche das ergebnis eines explains (analyze) in eine Datei zu “lenken”?

Innerhalb von psql kannst Du mit \o eine Ausgabedatei festlegen. Das gilt auch für das, was EXPLAIN auswirft. Du kannst auch auf der Kommandozeile mit echo ein Select bauen und das in psql pipen oder psql mit -c “explain …” aufrufen. Das kannst Du dann auch wieder in Datei leiten.


Andreas

Naja wie bereits gesagt kann ich nichts fetchen, da meine Programmierungebung /Treiber dann meckern (siehe oben Statement1 und Statement2) bleibt noch die variante über psql-konsole…

Habe mal versucht von Windows aus darauf zuzugreifen.
Bei Sourceforge gibts ein PostgreSQL Frontend… Das fragt mich aber leider immer nach einem Passwort und kann dahingehend nicht automatisiert werden…

Im Handbuch steht leider auch nichts dazu drin…

Wie kann ich von Windows aus auf einen Linux-Rechner zugreifen, dort die Postgre-Konsole öffnen und es mir dann irgendwie in windows zurückgeben lassen…

Leider sind meine Linux kenntnisse sehr beschränkt :frowning:

Mmhhh.

Habe mal versucht von Windows aus darauf zuzugreifen.

Wie?

Bei Sourceforge gibts ein PostgreSQL Frontend… Das fragt mich aber leider immer nach einem Passwort und kann dahingehend nicht automatisiert werden…

Du kannst mit TRUST in der pg_hba.conf arbeiten oder mit Umgebungsvariablen (PGPASS).

Im Handbuch steht leider auch nichts dazu drin…

http://www.postgresql.org/docs/current/static/app-psql.html

Wie kann ich von Windows aus auf einen Linux-Rechner zugreifen, dort die Postgre-Konsole öffnen und es mir dann irgendwie in windows zurückgeben lassen…

PuTTY als SSH-Client. Möglicherweise kann man PuTTY auch mit Optionen aufrufen, die eine Kommandozeile an den Server geben - also scriptgesteuertes Arbeiten ermöglicht.

Leider sind meine Linux kenntnisse sehr beschränkt > :frowning: >

Nun, daran kann man ja arbeiten, gell? :wink:

Andreas

Hallo und Danke sehr,

werde das ganze nächste Woche mal in Angriff nehmen…

Berichte dann davon wenn ich fertig bin…