sql >> Databasteknik >  >> RDS >> PostgreSQL

(Postgresql) gör tabellutlösande funktion infoga ID-värdet för ändrad rad i loggtabellen, för anpassad replikering

Jag kunde lösa detta genom att ändra AFTER till BEFORE i triggern, vilket jag först trodde inte skulle fungera, eller:

    CREATE OR REPLACE FUNCTION Insert() RETURNS TRIGGER AS $ReplInsert$
    BEGIN
        IF (TG_OP = 'DELETE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('DELETE', OLD.ID, OLD.NAME);
            RETURN OLD;
        ELSIF (TG_OP = 'UPDATE') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID ,NEW.NAME);
            RETURN NEW;
        ELSIF (TG_OP = 'INSERT') THEN
            INSERT INTO "log" ("Operation","ID","NAME")
    VALUES ('UPDATE', NEW.ID , NEW.NAME);
            RETURN NEW;
        END IF;
        RETURN NULL; 
    END;
$ReplInsert$ LANGUAGE plpgsql;

CREATE TRIGGER logTrg
BEFORE INSERT OR UPDATE OR DELETE ON "FIRST_NAME"
    FOR EACH ROW EXECUTE PROCEDURE Insert();



  1. ladda upp bilder + bildinformation från php-formulär till mysql-databas

  2. Ladda textfiler som clob till databasen

  3. Varför misslyckas den här frågan med EXECUTE IMMEDIATE?

  4. plpgsql-funktion:Returnera rader från en vy skapad från en slumpmässig tabell