sql >> Databasteknik >  >> RDS >> PostgreSQL

Utlösa SQL-utlösare endast när en viss användare uppdaterar raden

I de senaste Postgres-versionerna finns det en when klausul som du kan använda för att villkorligt aktivera avtryckaren. Du kan använda det som:

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

Jag är inte 100% på att den här kommer att fungera (kan inte testa atm):

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

(Om inte, försök att placera det i ett if-block i din plpgsql.)

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

(Det finns också [before|after] update of [col_name] syntax, men jag tenderar att tycka att det är mindre användbart eftersom det aktiveras även om kolumnens värde förblir detsamma.)

Lägger till den här extra anteckningen, ser att @CraigRingers svar framhäver vad du håller på med...

Att försöka ställa in master-master-replikering mellan Salesforce och Postgres med villkorade triggers är, tror jag, en dröm. Glöm det bara... Det kommer att finnas mycket mer i det än så:du måste låsa data på lämpligt sätt i båda ändar (vilket inte nödvändigtvis kommer att vara genomförbart på ett rimligt sätt), hantera de resulterande dödlägena (som kanske inte automatiskt upptäcks) och hantera motstridiga data.

Dina odds att lyckas med det här med ett litet team är ungefär noll -- speciellt om dina Postgres-kunskaper är på den nivå där att investera tid i att läsa manualen skulle svara på dina egna frågor. Du kan säkert slå vad om att någon som är mycket mer kompetent på Salesforce eller någon större SQL-butik (t.ex. den som Craig arbetar för) ansåg detsamma och antingen misslyckades eller uteslöt det.

Dessutom vill jag betona att implementering av effektiv, synkron multimasterreplikering inte ett löst problem. Du läste rätt:inte löst. För bara några år sedan, gjorde det överhuvudtaget var inte tillräckligt väl löst för att göra det i Postgres kärna. Så du har ingen tidigare teknik som fungerar bra att basera ditt arbete på och iterera på.



  1. Hur väljer jag ett fast antal rader för varje grupp?

  2. RADIANS() Exempel i SQL Server

  3. Postgresql-fråga för att få antal per månader inom ett år

  4. Vad är PostgreSQL likvärdig med SQL Server NVARCHAR?