亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL Locks的基礎知識有哪些

發布時間:2021-11-08 16:53:01 來源:億速云 閱讀:258 作者:iii 欄目:關系型數據庫

這篇文章主要介紹“PostgreSQL Locks的基礎知識有哪些”,在日常操作中,相信很多人在PostgreSQL Locks的基礎知識有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL Locks的基礎知識有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

PostgreSQL把鎖分為三類,table-level, row-level and advisory locks.Table和Row級鎖可以是顯式或隱式鎖,advisory locks通常是顯式鎖.顯式鎖在顯式用戶請求時獲得,而隱式鎖則通過標準SQL命令獲得.

Advisory Locks
PG提供了應用自定義的locks,這種locks稱為Advisory Locks — 系統并沒有強制使用這些鎖,由應用自行正確使用.
有兩種方法請求獲取advisory lock : Session Level和Transaction Level.
session level : 一旦在session level獲取了鎖,除非session終止或者顯式的釋放,否則鎖會一直持有.不同于標準的鎖請求,session level的advisory lock不需要遵守事務語義:在事務期間申請的lock會在rollback后仍會持有,同時就算事務調用失敗unlock也是有效的.lock可以多次獲取,對于每一次完整的鎖請求必須在釋放鎖前有相應的unlock.
transaction level : 與普通鎖類似,在事務結束時自動釋放,沒有顯式的unlock操作.
對于同一個Advisory Lock,如果同時請求session leve和transaction level的鎖,那么會以期望的方式阻塞.
下面是Advisory Lock的例子:

session 1

[local]:5432 pg12@testdb=# -- Transaction 1
[local]:5432 pg12@testdb=# BEGIN;
BEGIN
Time: 0.882 ms
[local]:5432 pg12@testdb=#* 
[local]:5432 pg12@testdb=#* SELECT pg_advisory_xact_lock(1);
 pg_advisory_xact_lock 
-----------------------
(1 row)
Time: 2.449 ms
[local]:5432 pg12@testdb=#* -- Some work here
[local]:5432 pg12@testdb=#*

session 2

[local]:5432 pg12@testdb=# -- Transaction 2
[local]:5432 pg12@testdb=# BEGIN;
BEGIN
Time: 0.468 ms
[local]:5432 pg12@testdb=#* 
[local]:5432 pg12@testdb=#* SELECT pg_advisory_xact_lock(1);

session 3

[local]:5432 pg12@testdb=# SELECT * FROM pg_locks where pid <> pg_backend_pid();
  locktype  | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid  |     mode      | granted | fastpath 
------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+------+---------------+---------+----------
 virtualxid |          |          |      |       | 5/4        |               |         |       |          | 5/4                | 1789 | ExclusiveLock | t       | t
 virtualxid |          |          |      |       | 4/13       |               |         |       |          | 4/13               | 1787 | ExclusiveLock | t       | t
 advisory   |    16384 |          |      |       |            |               |       0 |     1 |        1 | 5/4                | 1789 | ExclusiveLock | t       | f
 advisory   |    16384 |          |      |       |            |               |       0 |     1 |        1 | 4/13               | 1787 | ExclusiveLock | f       | f
(4 rows)
Time: 3.748 ms

通過查詢pg_locks,可以看到pid 1789持有advisory lock(granted = t),而pid 1787在等待該鎖(granted = f).

到此,關于“PostgreSQL Locks的基礎知識有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 株洲县| 叶城县| 石家庄市| 闽侯县| 十堰市| 博兴县| 遂川县| 左权县| 辉南县| 甘谷县| 福州市| 华蓥市| 保德县| 桑植县| 哈密市| 南京市| 柯坪县| 红桥区| 巴东县| 剑河县| 华坪县| 天气| 棋牌| 丰台区| 镇巴县| 武功县| 建水县| 屯昌县| 扶风县| 拉萨市| 钟山县| 湘潭县| 睢宁县| 噶尔县| 什邡市| 葫芦岛市| 禄丰县| 平乡县| 无棣县| 晋城|