Hallo,
ich bin gerade dabei partitionierten Tabellen zu erstellen. Dabei werden ja die RULES verwendet und nun habe ich das Problem, dass ich bei der Update Rule meine Spalten nicht kennzeichnen kann.
Ein Beispiel für Insert, wo ich meine neuen Datensätze über VALUES (NEW.*) einfüge.
Code:CREATE OR REPLACE RULE TABODRDATA_0112_INSERT AS ON INSERT TO TABODRDATA WHERE ( DEND < DATE '2002-01-01 00:00:00' AND DEND >= '2001-12-01 00:00:00') DO INSTEAD INSERT INTO TABODRDATA_0112 VALUES (NEW.*);
Ich schreibe halt nicht jeden einzelnen Value über das Prafix NEW hin, wie z.B. NEW.name,NEW.nachname,NEW.usw,....
Meine Update Rule schaut wie folgt aus:
Und ich habe knapp 30 Spalten. Wie kann ich das Abkürzen?Code:CREATE OR REPLACE RULE TABODRDATA_0112_UPDATE_2 AS ON UPDATE TO TABODRDATA WHERE ( (NEW.DEND <= DATE '2002-01-01 00:00:00' AND NEW.DEND > '2001-12-01 00:00:00') AND (OLD.DEND <= DATE '2002-01-01 00:00:00' OR OLD.DEND > '2001-12-01 00:00:00')) DO INSTEAD ( UPDATE TABODRDATA_0112 SET VCLINE = NEW.VCLINE, VCCELL = 'TEST_REGEL_0112', .......... NSTATEOID =NEW.NSTATEOID where DEND = NEW.DEND OR DEND = OLD.DEND);
mfg
Marcus
Du könntest Dir eine Funktion schreiben, die erst einmal die Spaltennamen aus den Katalogen rauspickt und mit diesem Wissen dann ein dynamisches SQL erzeugen, welches dann mit EXECUTE ausgeführt wird.
Falls Du aber Wert auf Performance legst, wirst Du das nicht wollen und statt dessen Deine Faulheit überwinden und die einzelnen Spalten schön nennen.
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Statt Rules kannst du auch eine Triggerfunktion einsetzen, die das dynamisch erledigen kann.
Irgendwo in meinem Buch gibt es ein Beispiel dafür, das müsste auch auf der Webseite zum Buch zu finden sein:
Hauptseite [PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler]
Das ist nich ganz so performant wie die Rules, aber dafür ist es wesentlich flexibler.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Okay, das mit dem Spalten auslesen klingt gut. Wie funktioniert das? Bin gaaaanz neu in PL/pgsql und daher für eure Hilfe sehr dankbar.
mfg
Marcus
nur so als info - in opera sieht die seite recht fehlerhaft aus
wenn du trigger verwendest (wie ads vorschlaegt) kannst du dir das wahrscheinlich sogar sparen ..
ausserdem musst du die so nicht notwendigen rules auch nicht anpassen, wenn du am modell der tabelle was aenderst
mir scheint das beinahe die göttlichste aller möglichen lösungen zu sein
Wollte jetzt nicht wieder alles verwerfen. Habe heute eine Funktion erstellt, die die partitionierten Tabellen, Indizes und alle Rules erstellt, doch wollte ich eine elegantere Lösung als mit den Massen an Attributen in der Update Rule. Die Funktion dient nur einer Testportierung und wird nur dafür einmal gebraucht.
mfg
Marcus
Dann nimm eine einzelne Triggerfunktion.
Ist zum Schluß weniger Arbeit ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Ich werde mich Morgen mal damit beschäftigen. Weis jetzt gerade überhaupt nicht, wie das funktioniert...Naja, mal schauen.
Danke.
mfg
Marcus
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen