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

更新の前後でフィールドがすべて等しい場合、postgresは実際にページファイルを更新しますか?

    Postgres(他のほとんどすべてのDBMSと同様)は、ターゲット値が元の値と異なるかどうかをチェックしません。したがって、答えは次のとおりです。はい、値が異なっていても行が更新されます。

    ただし、この場合、where句を含めることで、「空の」更新を簡単に防ぐことができます。

    INSERT INTO topic (......) 
    VALUES (......)
    ON CONFLICT (...) 
    DO UPDATE 
        set ... -- update all column
    WHERE topic IS DISTINCT FROM excluded;
    

    where句は、挿入されている行と同一の行を更新しないようにします。それを正しく機能させるために、あなたの挿入物は持っています すべてを一覧表示するには ターゲットテーブルの列。それ以外の場合、topic is distinct from excluded excludedであるため、条件は常にtrueになります。 行の列数はtopicよりも少なくなります 行、したがってそれはそれと「異なる」IDです。

    変更された値のチェックを追加することは、メーリングリストで何度も議論されており、常に破棄されています。主な理由は、すべての変更をチェックするオーバーヘッドがあることは意味がないということです。 いくつかのひどく書かれたものに対処するためだけの声明。




    1. データベースレコードを並べ替えて追加するにはどうすればよいですか?

    2. タイムスタンプ列から現在の月のレコードmysqlを選択します

    3. DBI begin_workは、ストアドプロシージャ呼び出しでは機能しません

    4. SQL Server は ID 列の順次挿入を保証しますか?