Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Kennzeichnung der Values bei Update Rule

  1. #1
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard Kennzeichnung der Values bei Update Rule

    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:

    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);
    Und ich habe knapp 30 Spalten. Wie kann ich das Abkürzen?

    mfg
    Marcus

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    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:

    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);
    Und ich habe knapp 30 Spalten. Wie kann ich das Abkürzen?

    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    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
    Oder die Faulheit mit göttlicher Kreativität kombinieren - und eine noch göttlichere Funktion implementieren, die mit den Infos aus dem Katalog, die entsprechenden statischen Rules erzeugt

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  5. #5
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    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

  6. #6
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    nur so als info - in opera sieht die seite recht fehlerhaft aus

  7. #7
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von drooper Beitrag anzeigen
    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
    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

  8. #8
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    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

  9. #9
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    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

  10. #10
    drooper ist offline Benutzer
    Registriert seit
    05.08.2009
    Beiträge
    81

    Standard

    Ich werde mich Morgen mal damit beschäftigen. Weis jetzt gerade überhaupt nicht, wie das funktioniert...Naja, mal schauen.

    Danke.

    mfg
    Marcus

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum