Exception: Welche Fehler-Info steht zur Verfügung?

DB-Version: PostgreSQL 8.1.10

In einer Funktion fange ich potentielle Exceptions bei unique_violation eines INSERT-Querys ab. Die betroffene Tabelle hat aber nun nicht nur eine Spalte mit einem UNIQUE-Constraint, sondern mehrere.

Ich würde gerne einen passenden Fehlercode zurückgeben, der Information über die betroffene Spalte enthält. Nach PL/pgSQL-Doku stehen mir im Handler-Block die Variablen SQLSTATE und SQLERRM zur Verfügung.
Kommt man dieser Stelle auf einfachem Wege an den Namen oder den Identifier des verletzten Constraints heran? Der Constraint-Bezeichner taucht ja immerhin in der SQLERRM auf - aber diesen danach zu durchforsten halte ich für etwas aufwendig…

Dank schonmal für jegliche Info oder Idee!

CU
Fröstel

Wie wäre es, die Exception an sich zu verhindern?

Avoid Unique Key violation - ads’ corner


Andreas

Hi Andreas,

geht mir gar nicht so sehr um das Verhindern der Constraint-Verletzung (würde ich hinkriegen), sondern darum, wie ich bei einem INSERT in eine Tabelle mit mehreren UNIQUE-Spalten einfach und praktisch herauskriege, welche die betroffene Spalte ist, deren UNIQUE-Constraint verletzt wird. Damit könnte ich dann in der Funktion, die den INSERT enthält, einen entsprechend angepassten Fehlercode zurückgeben.

Das ganze rührt wahrscheinlich etwas von meiner derzeitigen Neigung her, meinen Code etwas kompakter und leichter lesbar zu gestalten. Könnte aber vermutlich zu Performance-Einbrüchen führen, wenn ich einen knappen Exception-Block schreibe, anstatt z.B. mit eine paar PERFORM-Queries die einzutragenden Werte vorher zu überprüfen. Schicker Code ist eben nicht unbedingt gleichzeitig auch performant :frowning:

Danke übrigens für deinen Link - der könnte mir an anderer Stelle evt. hilfreich sein! :smiley:

CU
Fröstel