sql >> Databáze >  >> RDS >> PostgreSQL

Spustit SQL Trigger pouze tehdy, když konkrétní uživatel aktualizuje řádek

V posledních verzích Postgresu existuje when klauzule, kterou můžete použít k podmíněnému spuštění spouštěče. Můžete to použít jako:

... when (old.* is distinct from new.*) ...

Nejsem 100%, tohle bude fungovat (nemohu testovat atm):

... when (current_user = 'foo') ...

(Pokud ne, zkuste jej umístit do bloku if ve vašem plpgsql.)

http://www.postgresql.org/docs/current/static /sql-createtrigger.html

(Existuje také [before|after] update of [col_name] syntaxe, ale mám tendenci to považovat za méně užitečné, protože se spustí, i když hodnota sloupce zůstane stejná.)

Přidání této poznámky navíc, když vidíte, že odpověď @CraigRinger zdůrazňuje, co máte v plánu...

Pokoušet se nastavit replikaci master-master mezi Salesforce a Postgres pomocí podmíněných spouštěčů je, myslím, sen. Jen na to zapomeňte... Bude toho mnohem víc:budete muset uzamknout data podle potřeby na obou koncích (což nemusí být nutně proveditelné rozumným způsobem), spravovat výsledná uváznutí (což nemusí být automaticky detekován) a vypořádat se s konfliktními daty.

Vaše šance, že to s malým týmem úspěšně zvládnete, jsou asi nulové – zvláště pokud jsou vaše dovednosti v Postgresu na úrovni, kdy by investování času do čtení manuálu zodpovědělo vaše vlastní otázky. Můžete se klidně vsadit, že někdo mnohem kompetentnější ze Salesforce nebo nějakého velkého obchodu s SQL (např. jako ten, pro který Craig pracuje) uvažoval o tom samém a buď to žalostně selhal, nebo to vyloučil.

Navíc bych zdůraznil, že implementace efektivní, synchronní, multi-master replikace není vyřešený problém. Čtete správně:ne vyřešeno. Ještě před pár lety jsem to vůbec dělal nebyl dostatečně dobře vyřešen, aby se dostal do jádra Postgres. Nemáte tedy žádné předchozí umění, které by dobře fungovalo, na kterém byste mohli založit svou práci a na kterém byste mohli iterovat.



  1. Vytvořte tabulku DDL s okamžitým spuštěním v databázi Oracle, část 2

  2. Jak získat názvy a typy sloupců z dotazu PostgreSQL (bez jeho spuštění)?

  3. Chyba 1064 v Grafaně pro vytvoření grafu pomocí databáze mysql

  4. Je sdružování připojení nutností v ODP.NET?