Ergebnis 1 bis 7 von 7

Thema: DEFAULT-Spaltenwert in der Triggerfunktion

  1. #1
    alger ist offline Neuer Benutzer
    Registriert seit
    14.12.2009
    Beiträge
    22

    Standard DEFAULT-Spaltenwert in der Triggerfunktion

    Hi,

    gibt es eine Möglichkeit eine generische UPDATE-Triggerfunktion in einer prozeduralen Sprache wie PLSQL oder PLPYTHON zu schreiben, die eine der Spalten auf ihren DEFAULT-Wert setzt (der bei CREATE TABLE angegebene DEFAULT-Wert), etwa so:

    .....
    NEW.id='default'
    ....
    RETURN NEW;

    Danke

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

    Standard

    Zitat Zitat von alger Beitrag anzeigen
    Hi,

    gibt es eine Möglichkeit eine generische UPDATE-Triggerfunktion in einer prozeduralen Sprache wie PLSQL oder PLPYTHON zu schreiben, die eine der Spalten auf ihren DEFAULT-Wert setzt (der bei CREATE TABLE angegebene DEFAULT-Wert), etwa so:

    .....
    NEW.id='default'
    ....
    RETURN NEW;

    Danke
    Ungetestet:

    schaue in pg_attribute, ob es einen Default-Value gibt, und hole diesen aus pg_attrdef, falls es einen gibt.

    Bessere Lösung:

    guggst Du Spalte column_default in information_schema.columns. Besser, weil portabler und pg_* versionsabhängig ist bzw. sein kann.

    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
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Ungetestet:

    schaue in pg_attribute, ob es einen Default-Value gibt, und hole diesen aus pg_attrdef, falls es einen gibt.

    Bessere Lösung:

    guggst Du Spalte column_default in information_schema.columns. Besser, weil portabler und pg_* versionsabhängig ist bzw. sein kann.

    Andreas
    Code:
    test=*# create table bla (id serial, val int default 5);
    NOTICE:  CREATE TABLE will create implicit sequence "bla_id_seq" for serial column "bla.id"
    CREATE TABLE
    Zeit: 2,391 ms
    test=*# create or replace function bla_insert() returns trigger as $$begin raise notice 'bla %',new.val; NEW.val := (select column_default from information_schema.columns where table_name = tg_table_name and column_name = 'val'); return NEW; end; $$ language plpgsql;
    CREATE FUNCTION
    Zeit: 0,451 ms
    test=*# create trigger trg_bla before insert on bla for each row execute procedure bla_insert();
    CREATE TRIGGER
    Zeit: 0,630 ms
    test=*# insert into bla (val) values (33);
    NOTICE:  bla 33
    INSERT 0 1
    Zeit: 5,040 ms
    test=*# select * from bla;
     id | val
    ----+-----
      1 |   5
    (1 Zeile)
    mal so als Fahrplan ...

    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

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

    Standard

    Hmm, ev. reicht auch einfach DEFAULT aus, ohne Hochkommas.
    Im SQL selbst genügt das, aber ich weiß nicht, ob die Datenbank das so spät im Trigger noch mal ersetzt.
    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
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Hmm, ev. reicht auch einfach DEFAULT aus, ohne Hochkommas.
    Im SQL selbst genügt das, aber ich weiß nicht, ob die Datenbank das so spät im Trigger noch mal ersetzt.
    das habe ich erfolglos probiert ...

    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

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

    Standard

    Ah ok, gut zu wissen.
    Danke für die Info.
    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

  7. #7
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Ah ok, gut zu wissen.
    Danke für die Info.
    Gern geschehen ;-)

    Darfst mir im Hotel einen ausgeben dafür!

    Btw.: schön, daß Du auch dort gebucht hast.


    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

Ähnliche Themen

  1. Problem Default Tablespace greift nicht
    Von serverfreak1982 im Forum Konfiguration
    Antworten: 4
    Letzter Beitrag: 27.11.2010, 22:12
  2. Frage Default Cast abschalten
    Von traxanos im Forum Konfiguration
    Antworten: 4
    Letzter Beitrag: 08.02.2010, 11:23
  3. spaltenwert in abfrage manuell zuweisen
    Von michi4004 im Forum SQL
    Antworten: 1
    Letzter Beitrag: 19.10.2009, 14:51
  4. Default-Werte für Views
    Von stardust_ger im Forum SQL
    Antworten: 1
    Letzter Beitrag: 06.05.2009, 13:36
  5. Unix Timestamp in Default Klausel
    Von derAnder im Forum SQL
    Antworten: 4
    Letzter Beitrag: 06.04.2006, 15:59

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