Trigger in C -> Werte schreiben

Hallo,
ich habe gesucht, bin aber nicht fündig geworden. Ich habe eine Tabelle mit unter anderem 3 Spalten, in denen jeweils ein Gewicht in unterschiedlichen Einheiten gespeichert ist (KG, oz, lb). Wenn jetzt eine der Spalten geändert wird, sollen die beiden anderen angepasst werden. Die Zuordnung im Trigger selbst ist nicht das Problem, dafür gibt es ja die diversen Makros.
Der Ablauf ist folgender:

  • Werte einlesen (wenn vorhanden),
  • nach Update mit vorherigen Werten vergleichen,
  • die unveränderten neu berechnen,
  • berechnete Werte in die jeweilige Spalte schreiben.

Das Lesen nach Spaltenname ist nicht das Problem:

unit kg = DatumGetFloat8(GetAttributeByName(t, "menge_kg", &ist_null));

Nur das Speichern des Wertes in eine Spalte will mir nicht einleuchten. Wie bekomme ich dieses hin? :confused:

Für einen Hinweis bin ich dankbar.

Gruß, Schmole.

Kurze Zwischenfrage: Warum solch ein kapottes Design? Das ist doch umrechenbar, speichere also nur z.B. in KG und rechne für die Ausgabe das bei Bedarf in die anderen Einheiten um.

Andreas

Und vor allem - warum macht man sich die Arbeit und schreibt das in C?

Hallo,
dieses soll nur ein Beispiel für meine Problemstellung sein. Aber wie funktioniert das denn in C?
Zum Umrechnen zur Anzeige: Es greifen mehrere Clients auf die Tabelle zu und es muss ja nicht jedes mal zur Anzeige berechnet werde. Wenn es sich um mehrere Tausend Einträge handelt wird dies für diue Anzeigende Software jedes mal ne wilde Rechnerei. Ich habe schon bewusst diesen Weg gewählt.

Habt ihr denn einen Vorschlag?

Gruß, Schmole.

Wieso nimmst du dann nicht so etwas einfaches wie pl/pgSQL für den Trigger?

Ich möchte nur anmerken, daß Deine Tabelle somit größer wird. Dies bedeutet aber auch mehr Lesezugriffe bei einem SELECT auf die Platte. Dir ist schon bekannt, in welchem Verhältniss dies teurer als eine simple Multiplikation auf modernen CPUs ist?

Außerdem wird Deine TRIGGER-Lösung nicht wirklich trivial, falls Du nicht exakt weißt, welcher von den 3 Werten nun ein Update bekommt.

Andreas