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

次にpostgresを選択するまで行をロックします

    これは不可能だと思います。テーブルへの読み取り専用アクセスをブロックすることはできません(選択がFOR UPDATEで行われない限り) )

    私の知る限り、あなたが持っている唯一のチャンスは、pg_advisory_lock()を使用することです。 関数。
    http:// www .postgresql.org / docs / current / static / Functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

    ただし、これには、それを介して取得したロックを「手動で」解放する必要があります。それでは自動ロック解除はできません。

    行をロックするには、次のようなものが必要です。

    select pg_advisory_lock(id), * 
    from 
    ( 
      select * table1 order by id limit 5
    ) t
    

    (LIMIT部分の派生テーブルの使用に注意してください。説明については、私が投稿した手動リンクを参照してください)

    次に、取得したIDを保存し、後でpg_advisory_unlock()を呼び出す必要があります。 IDごとに。

    各プロセスが常にすべてをリリースしている場合 IDを一度に使用すると、pg_advisory_unlock_all()を使用できます。 代わりは。その後、取得したIDを保存する必要はありません。

    これはないことに注意してください 他の人が「通常の」選択を使用して行を読み取らないようにします。そのテーブルにアクセスするすべてのプロセスが同じパターンのロック取得を使用している場合にのみ機能します。



    1. 複数の列のSELECTとINSERT間の競合状態

    2. Oracleでコンマ区切りの文字列を分割する方法

    3. Oracleでタイムゾーンを変換する方法は?

    4. C++を使用してmySQLデータベースに接続する方法