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

明示的なロックなしのpostgresデッドロック

    明示的なLOCKは必要ありません デッドロックに陥ります。これは、INSERTのみを使用した非常に単純なデモです。

    create table a(i int primary key);
    create table b(i int primary key);
    

    セッション#1の内容:

    begin;
    insert into a values(1);
    

    次に、セッション#2は次のことを行います。

    begin;
    insert into b values(1);
    insert into a values(1);
    -- here it goes into waiting for session #1 to finish its transaction
    

    次に、セッション#1は次のことを行います。

    insert into b values(1);
    

    そして、デッドロックが発生します:

    同じことが、単純なUPDATE、またはUPDATEとINSERTの組み合わせでも発生する可能性があります。これらの操作は暗黙的なロックを取得し、異なるセッションで異なる順序で発生すると、デッドロックが発生する可能性があります。



    1. 2つの列の値を比較する

    2. Qtアプリケーションから現在のPostgreSQLユーザーの役割を確認するにはどうすればよいですか?

    3. SQL:副選択として合計を取得するのが非常に遅い

    4. MySQLのテキストフィールドから2桁の連続した数字を抽出するにはどうすればよいですか?