Re: tatsächlich (k)ein Syntaxfehler

From: Peter Eisentraut <peter_e(at)gmx(dot)net>
To: "Christoph 'Leo' =?iso-8859-1?q?Wei=DFenborn?=" <chw-le(at)gmx(dot)de>
Cc: pgsql-de-allgemein(at)postgresql(dot)org, Andreas Seltenreich <andreas+pg(at)gate450(dot)dyndns(dot)org>
Subject: Re: tatsächlich (k)ein Syntaxfehler
Date: 2005-08-04 08:31:33
Message-ID: 200508041031.34547.peter_e@gmx.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Christoph 'Leo' Weißenborn wrote:
> Da ich mit PostGres noch nicht so vertraut bin, sagt mir das leider
> noch nicht viel. Ich verstehe das mal so: ohne Tabelle kann der
> Planer nix vorbereiten. Aber dann frage ich mich, wie die Benutzer
> verwaltet werden? Nicht auch in einer Tabelle?

Sicher werden dazu intern auch Tabellen gelesen. Derartige Zugriffe
gehen aber nicht durch den Planer sondern werden quasi "von Hand"
ausgeführt. Außerdem besteht so ein Befehl wie CREATE USER oder CREATE
TABLE nicht nur aus einem Tabellenzugriff sondern mehreren.

> Und was sind Utility-Funktionen? (Die ohne Tabellenzugriff? Also
> alles außer: SELECT/INSERT/UPDATE/DELETE FROM ?!)

Genau.

> Ich habe nach einigem Probieren auch mal den JDBC-Treiber 7.4
> probiert. Mit dem klappt zumindest:
> CREATE USER "bibo2" WITH UNENCRYPTED PASSWORD $1
> Warum geht dies nun aber mit dem 8.0 nicht mehr?

Ich würde mal vermuten, dass der JDBC-Treiber bis 7.4 das Vorbereiten
selbst gemacht hat, und das Einsetzen der Parameter nur eine
String-Operation war. Ab 8.0 kann der PostgreSQL-Server aber "richtige"
Prepared Statements, das heißt es bringt auch wirklich was bei der
Performance. Daher wurde der JDBC-Treiber wohl umgestrickt und
überlässt das jetzt dem Server und übernimmt damit auch die
Einschränkungen des Servers.

> Laut JDBC-Spek _kann_ ein PreparedStatement vorbereitet werden. Ist
> dies jedoch nicht möglich (was bei CREATE USER $1) wohl der Fall
> ist, so muß der Treiber nicht zwangsläufig in einen Fehler laufen.
> Er müßte dann eigentlich selbst die Parameter einsetzen und das
> komplette Query dann übermitteln ohne Vorbereitung und somit ohne
> Optimierung. In der JDBC-Spek ist jedenfalls nicht davon die Rede,
> daß bestimmte Queries nicht als PreparedStatement ausgeführt werden
> können sollen.²

In dem Falle würde ich mich auf der JDBC-Liste (pgsql-jdbc) beschweren.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Michael Lodemann 2005-08-05 06:38:12 jeden x-ten Datensatz holen
Previous Message Christoph 'Le=?ISO-8859-1?Q?o'_Wei=DFenborn?= 2005-08-04 07:33:11 Re: t=?ISO-8859-1?Q?ats=E4chlich_(k?=)ein Syntaxfehler