PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

(Postgresql) powoduje, że funkcja wyzwalacza tabeli wstawia wartość identyfikatora zmienionego wiersza do tabeli dziennika, dla niestandardowej replikacji

Udało mi się rozwiązać ten problem, zmieniając PO na PRZED w wyzwalaczu, co na początku wydawało mi się nieskuteczne lub:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodajesz całkowitą liczbę wierszy przez Marshmallow z @post_dump?

  2. Błąd Pycharm:niewłaściwie skonfigurowany

  3. Pobierz najnowsze dziecko na rodzica z dużej tabeli — zapytanie jest zbyt wolne

  4. Zalogowany jako postgres, ale pojawia się błąd createuser:tworzenie nowej roli nie powiodło się:BŁĄD:musisz być superużytkownikiem, aby utworzyć superużytkowników

  5. Wartości NULL dla referential_constraints.unique_constraint_* kolumn w schemacie informacyjnym