sql >> データベース >  >> RDS >> PostgreSQL

特定のユーザーが行を更新した場合にのみSQLトリガーを起動します

    最近のPostgresバージョンでは、 when があります 条件付きでトリガーを起動するために使用できる句。次のように使用できます:

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

    私は100%ではありませんこれは機能します(atmをテストできません):

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

    (そうでない場合は、plpgsqlのifブロックに配置してみてください。)

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

    ([col_name]の[before|after]更新もあります 構文ですが、列の値が同じでも起動するため、あまり役に立たない傾向があります。)

    この余分なメモを追加すると、@ CraigRingerの回答が、あなたが今何をしているのかを強調していることがわかります...

    条件付きトリガーを使用してSalesforceとPostgresの間にマスターマスターレプリケーションを設定しようとすることは、夢のようなことだと思います。忘れてください...それだけではありません。両端でデータを適切にロックし(必ずしも合理的な方法で実行できるとは限りません)、結果として生じるデッドロックを管理する必要があります(自動的に検出されない可能性があります)、競合するデータを処理します。

    小さなチームでこれを成功させる確率はほぼゼロです。特に、Postgresのスキルが、マニュアルを読むことに時間を費やすと自分の質問に答えられるレベルにある場合はなおさらです。 Salesforceまたはいくつかの主要なSQLショップ(Craigが働いているショップなど)ではるかに有能な誰かが同じと見なし、惨めに失敗したか、それを除外したことは間違いありません。

    さらに、効率的で同期的なマルチマスターレプリケーションの実装はではないことを強調しておきます。 解決された問題。あなたはその権利を読んでいます:ない 解決しました。ほんの数年前、それをまったく Postgresコアでそれを作るのに十分に解決されていませんでした。したがって、作業の基礎を築き、反復するのに適した先行技術はありません。



    1. デッドロック パズル:犠牲者はリソースを所有しておらず、デッドロックを解決するために殺すために使用されます

    2. Laravel-Paginateランダムレコード

    3. php --laravel:データベースで重複する時間を処理する方法は?

    4. SQLSTATE [HY000][2002]Laravelでテーブルを移行するときにそのようなファイルまたはディレクトリエラーはありません