Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Tabelle bei Erstellung mit festgelegten Daten füllen

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Tom.S, 27 Januar 2016.

  1. Tom.S

    Tom.S Fleissiger Benutzer

    Hallo,
    in einem recht großen Datenbankprojekt möchte ich manche Tabellen mit bestimmten Werten gefüllt wissen.
    Z. B. habe ich eine feste Liste mit Straßennamen, die in die strassen-Tabelle zusammen mit ihrer Länge gespeichert werden sollen.

    Diese strassen-Tabellendaten sollen aber jedes truncate überstehen, bzw. danach sofort automatisch neu gefüllt werden, genauso soll sie beim Sichern und Einspielen der reinen Tabellenstrukturdaten sofort gefüllt werden.

    Geht das?

    PS. Ein Enum-Type kommt nicht in Frage.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Truncate ist truncate. Du kannst via Trigger / Rules aber ein truncate verhindern.

    Du kannst die Tabelle in das Template packen, dann ist diese in allen später neu erstellten Datenbanken, die das Templatre nutzen, schon drin.
     
  3. Tom.S

    Tom.S Fleissiger Benutzer

    Ich wollte hier noch meine Lösung nachtragen. Vielleicht ist sie mal jemandem von Nutzen:

    Es funktioniert doch relativ einfach, eine Tabelle nach einem Truncate mit festen Werten zu füllen: Mit einem AFTER TRUNCATE Trigger:
    Code:
    CREATE TRIGGER insert_sprachen_trigger
      AFTER TRUNCATE
      ON global.spr_sprache
      FOR EACH STATEMENT
      EXECUTE PROCEDURE global.insert_sprachen_func();
    und einer zugehörigen Funktion, in die die Daten fest kodiert werden:
    Code:
    CREATE OR REPLACE FUNCTION global.insert_sprachen_func()
      RETURNS trigger AS
    $BODY$
    BEGIN
    
    INSERT INTO global.spr_sprache(
                 spr_sprache)
        VALUES ('Altgriechisch');
    INSERT INTO global.spr_sprache(
                 spr_sprache)
        VALUES ('Arabisch');
    INSERT INTO global.spr_sprache(
                 spr_sprache)
        VALUES ('Deutsch');
    INSERT INTO global.spr_sprache(
                 spr_sprache)
        VALUES ('Englisch');
    RETURN NULL;
    END;
    
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
     
    ukulele und akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden