Funktion/Rule beim INSERT in Spalte Y wert in Spalte X setzen

Hallo Leute,

bin sehr neu in Sachen Postgres, daher vielleicht auch meine Frage etwas “komisch”.

Also ich möchte das in Table A sobald ein INSERT erfolgt mit einem Wert (!="") in Spalte Y eine fortlaufende Nummerierung in Spalte X stattfindet.

Primary Key würde rausfallen da nicht immer ein wert gesetzt wird, sondern halt nur wenn ein Wert in Spalte Y eingetagen wird. Wie ich gesehen habe, gibt es die Möglichkeit einer RULE.
Dies alles müsste auch Datenbanktechnisch laufen, nicht über externe Scripts.

Bin für jeden Tipp Dankbar.

Mit freundlichen Grüßen

TRIGGER ist hier die Lösung:

edb=*> create table steamload(y text, i int);
CREATE TABLE
edb=*> create sequence seq_steamload;
CREATE SEQUENCE
edb=*> create or replace function trg_streamload() returns trigger as $$ begin case when new.y != '' then new.i = nextval('seq_steamload'); else null; end case; return new; end; $$language plpgsql;
CREATE FUNCTION
edb=*> create trigger trg1 before insert on steamload for each row execute procedure trg_streamload();
CREATE TRIGGER
edb=*> 
edb=*> 
edb=*> insert into steamload (y) values ('test');
INSERT 0 1
edb=*> insert into steamload (y) values (null);
INSERT 0 1
edb=*> insert into steamload (y) values ('test 2');
INSERT 0 1
edb=*> select * from steamload ;
   y    | i 
--------+---
 test   | 1
        |  
 test 2 | 2
(3 rows)

edb=*>

Vergiss RULE’s, die sind deprecated.

wow danke für die schnelle Antwort. Ok also das Resultat sieht sehr gut aus und scheint genau das zu sein was ich gesucht habe bzw. was mein wünsch wäre.

Ich versuche dies nun in der Datenbank mal umzusetzen.

//EDIT

passt perfekt. Musste wohl noch ein paar werte anpassen wegen unterschiedlichen Schema´s, aber passt un dläuft perfekt. DANKE!

MfG

1 Like