Ich habe eine Tabelle Table_A
:postgresql Auslöser für die Befüllung neue Spalte auf Einsatz
\d "Table_A";
Table "public.Table_A"
Column | Type | Modifiers
----------+---------+-------------------------------------------------------------
id | integer | not null default nextval('"Table_A_id_seq"'::regclass)
field1 | bigint |
field2 | bigint |
und jetzt will ich eine neue Spalte hinzuzufügen. So laufe ich:
ALTER TABLE "Table_A" ADD COLUMN "newId" BIGINT DEFAULT NULL;
jetzt habe ich:
\d "Table_A";
Table "public.Table_A"
Column | Type | Modifiers
----------+---------+-------------------------------------------------------------
id | integer | not null default nextval('"Table_A_id_seq"'::regclass)
field1 | bigint |
field2 | bigint |
newId | bigint |
Und ich will newId
für neue/aktualisierte Zeilen mit dem gleichen Wert wie id
gefüllt werden.
Ich habe die folgende Funktion und Trigger:
CREATE OR REPLACE FUNCTION autoFillNewId() RETURNS TRIGGER AS $$
BEGIN
NEW."newId" := NEW."id";
RETURN NEW;
END $$ LANGUAGE plpgsql;
CREATE TRIGGER "newIdAutoFill" AFTER INSERT OR UPDATE ON "Table_A" EXECUTE PROCEDURE autoFillNewId();
Nun, wenn ich einfügen etwas mit:
select * from "Table_A" where id = 97;
id | field1 | field2 | newId
----+----------+----------+-------
97 | 1 | 97 |
Hinweis:
INSERT INTO "Table_A" values (97, 1, 97);
newId
nicht gefüllt ist I auch versucht mitFOR EACH ROW
her m ein paar Antworten hier in SO
Was fehlt mir?
Sie benötigen einen 'BEFORE INSERT OR UPDATE'-Trigger. – Patrick
danke, es funktioniert. Ich dachte, es wäre nur ein einfaches Detail, aber ich fand es schwer, es zu lösen :) Warum muss es ein VORHER sein? – pedrorijo91
Siehe Antwort unten. – Patrick