91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

阳高县| 宁德市| 军事| 威宁| 右玉县| 澳门| 收藏| 宜黄县| 宝应县| 云龙县| 荆州市| 瓦房店市| 留坝县| 招远市| 贵南县| 如东县| 凤山县| 合阳县| 宜兰市| 广宗县| 凌源市| 灵武市| 尖扎县| 西青区| 屏东县| 杂多县| 雷山县| 金沙县| 兴文县| 临朐县| 神农架林区| 永年县| 萨迦县| 黄龙县| 安徽省| 临沂市| 阿勒泰市| 河池市| 务川| 长泰县| 县级市|