關於PostgreSQL 版本識別 的詳解

jacklove
發布: 2018-06-11 17:22:42
原創
2387 人瀏覽過

Insert\delete\update透過ctid#定位,並查看該記錄xmin\xmax的變化。

    Xid:資料庫的交易ID;

    Xmin:行頭部的xid訊息,xmin表示插入該記錄的事務ID

    Xmax :表示刪除或lock該記錄的交易ID

    xid_snapshot#:在目前叢集中結束的交易

    Clog:交易提交狀態日誌

 記錄格式的定義:htup_details.hPOSTGRES heap tuple header definitions.

1)查看所有xid相關的函數有哪些,這裡需要的是txid_current函數

#2)可以看到目前的事務ID

postgres=# select * from txid_current();
 txid_current
--------------
         1676
(1 row)
 
3)进行一次insert后,看事务ID已经+1
postgres=# insert into tt values(1);
INSERT 0 1
postgres=# select ctid,xmin,xmax,cmin,cmax,id from tt;
 ctid  | xmin | xmax | cmin | cmax | id
-------+------+------+------+------+----
 (0,1) | 1677 |    0 |    0 |    0 |  1
(1 row)
登入後複製

 

4)開啟一個事務後,進行update

postgres=# begin;
BEGIN
 
postgres=# update tt set id=3;
UPDATE 1
postgres=# select ctid,xmin,xmax,cmin,cmax,id from tt;
 ctid  | xmin | xmax | cmin | cmax | id
-------+------+------+------+------+----
 (0,2) | 1678 |    0 |    0 |    0 |  3
(1 row)
登入後複製

 

#5)在另一個會話中查看

postgres=#  select ctid,xmin,xmax,cmin,cmax,id from tt;
 ctid  | xmin | xmax | cmin | cmax | id
-------+------+------+------+------+----
 (0,1) | 1677 | 1678 |    0 |    0 |  1
(1 row)
登入後複製


#看目前未結束的事務,或未開啟的事務

#
postgres=# select *from txid_current_snapshot();
 txid_current_snapshot
-----------------------
 1684:1684:
(1 row)
 
postgres=# select * from txid_current();
 txid_current
--------------
         1684
(1 row)
登入後複製

 

記錄事務是否提交,在這個檔案裡面,bit

-rw-------. 1 pg pg 8192 Jun 10 04:19 0000
[pg@localhost pg_clog]$ pwd
/home/pg/data/pg_clog
登入後複製

本文介紹了PostgreSQL 版本識別,更多相關內容請關注php中文網。

相關推薦:

講解B/S與C/S究竟是何物

如何透過css3 html5實現縱向選單

關於HTML5本機儲存的相關解說

以上是關於PostgreSQL 版本識別 的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!