Hallo zusammen,
meine Idee war, über eine zentrale Prozedur, die als Parameter NEW und OLD übergeben bekommt, zu prüfen bei welchen Spalten sich der Inhalt geändert hat und dies Änderung dann in einer Tabelle zu dokumentieren.
Das funktioniert so weit sehr gut. Allerdings gibt es ein Problem, wenn diese Prozedur innerhalb einer Transaktion* von Triggern (BEFORE UPDATE) verschiedener Tabellen aufgerufen wird.
Es kommt dann folgende Fehlermeldung:
SQLSTATE[42804]: Datatype mismatch: 7 ERROR: type of parameter 1 (tabelle_2) does not match that when preparing the plan (tabelle_1)
CONTEXT: PL/pgSQL function own_log_aenderungen(record,record,text,text) line 12 at assignment
SQL statement “CALL cat_data.own_log_aenderungen(NEW, OLD, ‘tabelle_2’, NEW.primary_key::text)”
PL/pgSQL function trigger_fct_update_anweisungen() line 7 at CALL
Wenn ich die Prozedur “own_log_aenderungen” einfach noch einmal unter “own_log_aenderungen_2” abspeichere und entsprechen in den Triggern aufrufe ( so mein aktueller work around) klappt wieder alles wie es soll?
Ganz offensichtlich hat das etwas mit dem Ausführplan zu tun, den sich Postgres zurecht legt. Kann ich das irgendwie beinflussen? Ich konnte nichts dazu finden.
Hat dazu jemand eine Idee? Wenn noch Infos fehlen, dann einfach Bescheid geben.
*Die Datenbankeinträge erfolgen über php und PDO. Die UPDATE Anweisungen für die Tabellen (tabelle_1 und tabelle_2) sind eingebettet zwischen ->beginTransaction() und ->commit()