Dalam versi Postgres terbaru, ada when
klausa yang dapat Anda gunakan untuk memicu pemicu secara kondisional. Anda dapat menggunakannya seperti:
... when (old.* is distinct from new.*) ...
Saya tidak 100% yang ini akan berfungsi (tidak dapat menguji atm):
... when (current_user = 'foo') ...
(Jika tidak, coba letakkan di blok if di plpgsql Anda.)
http://www.postgresql.org/docs/current/static /sql-createtrigger.html
(Ada juga [before|after] update of [col_name]
sintaks, tetapi saya cenderung menganggapnya kurang berguna karena akan menyala meskipun nilai kolomnya tetap sama.)
Menambahkan catatan tambahan ini, melihat bahwa jawaban @CraigRinger menyoroti apa yang Anda rencanakan...
Mencoba mengatur replikasi master-master antara Salesforce dan Postgres menggunakan pemicu bersyarat, menurut saya, adalah mimpi pipa. Lupakan saja ... Akan ada lebih dari itu:Anda harus mengunci data yang sesuai di kedua ujungnya (yang belum tentu layak dengan cara yang masuk akal), mengelola kebuntuan yang dihasilkan (yang mungkin tidak terdeteksi secara otomatis), dan menangani data yang bentrok.
Peluang Anda untuk berhasil melakukan ini dengan tim kecil adalah sekitar nol -- terutama jika keterampilan Postgres Anda berada pada tingkat di mana menginvestasikan waktu dalam membaca manual akan menjawab pertanyaan Anda sendiri. Anda dapat bertaruh dengan aman bahwa seseorang yang jauh lebih kompeten di Salesforce atau beberapa toko SQL besar (misalnya seperti tempat Craig bekerja) dianggap sama, dan gagal total atau mengesampingkannya.
Selain itu, saya menekankan bahwa menerapkan replikasi multi-master yang efisien, sinkron, tidak masalah yang terpecahkan. Anda membacanya dengan benar:tidak terselesaikan. Hanya beberapa tahun yang lalu, melakukannya sama sekali tidak diselesaikan dengan cukup baik untuk membuatnya di inti Postgres. Jadi, Anda tidak memiliki karya sebelumnya yang berfungsi dengan baik untuk mendasarkan dan mengulangi pekerjaan Anda.