sql >> Database teknologi >  >> RDS >> PostgreSQL

Udløs kun SQL Trigger, når en bestemt bruger opdaterer rækken

I de seneste Postgres-versioner er der en when klausul, som du kan bruge til betinget at udløse udløseren. Du kan bruge det som:

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

Jeg er ikke 100%, at denne vil fungere (kan ikke teste pengeautomat):

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

(Hvis ikke, prøv at placere den i en if-blok i din plpgsql.)

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

(Der er også [before|after] update of [col_name] syntaks, men jeg har en tendens til at finde den mindre nyttig, fordi den udløses, selvom kolonnens værdi forbliver den samme.)

Tilføjer denne ekstra note, da @CraigRingers svar fremhæver, hvad du har gang i...

At forsøge at konfigurere master-master-replikering mellem Salesforce og Postgres ved hjælp af betingede triggere er, tror jeg, en drøm. Bare glem det... Der kommer til at være meget mere i det end det:du skal låse data efter behov i begge ender (hvilket ikke nødvendigvis vil være muligt på en rimelig måde), administrere de deraf følgende deadlocks (som muligvis ikke automatisk opdaget), og håndtere modstridende data.

Dine odds for at lykkes med dette med et lille hold er omkring nul -- især hvis dine Postgres-færdigheder er på det niveau, hvor at investere tid i at læse manualen ville besvare dine egne spørgsmål. Du kan roligt vædde på, at en, der er meget mere kompetent hos Salesforce eller en større SQL-butik (f.eks. som den Craig arbejder for) overvejede det samme, og enten mislykkedes eller udelukkede det.

Desuden vil jeg understrege, at implementering af effektiv, synkron multi-master replikering ikke er et løst problem. Du læste rigtigt:ikke løst. For bare et par år siden, gjorde det overhovedet var ikke godt løst nok til at gøre det i Postgres-kernen. Så du har ingen kendt teknik, der fungerer godt at basere dit arbejde på og gentage det.



  1. Hvordan genindlæses automatisk efter brug af identity_insert?

  2. Korrekt indeksering af Join-Where-Group Ved at vælge forespørgsler undgå at bruge midlertidig; Bruger filsortering

  3. Hvordan opdager man en tilbagerulning i MySQL-lagret procedure?

  4. Sådan opgraderes fra MySQL gamle adgangskoder til nyt adgangskodesystem