PostgreSQL隱藏欄位tableoid

来源:http://www.cnblogs.com/kuang17/archive/2016/10/28/6008227.html
-Advertisement-
Play Games

問題來源: 今天群里有人問:tableoid欄位在每行都有,而且一個表裡面的值是重覆的,這樣不合理...... 因此做了一些分析: 1)創建了一個表 2)查看該表的所有欄位 包括隱藏的: 可以發現有6個隱藏的欄位,其中cmax xmax cmin xmin都跟事物有關,在PG事物處理相關文章中可以經 ...


問題來源:

今天群里有人問:tableoid欄位在每行都有,而且一個表裡面的值是重覆的,這樣不合理......

 

因此做了一些分析:

 

1)創建了一個表

apple=# \d test_time
             Table "public.test_time"
 Column |            Type             | Modifiers
--------+-----------------------------+-----------
 id     | integer                     |
 date   | timestamp without time zone |

 

2)查看該表的所有欄位 包括隱藏的:

apple=# select * from pg_attribute where attrelid in (select oid from pg_class where relname = 'test_time');
 attrelid | attname  | atttypid | attstattarget | attlen | attnum | attndims | attcacheoff | atttypmod | attbyval | attstorage | attalign | attnotnull | atthasdef | attisdropped | attislocal | attinhcount | attcollation | attacl | attoptions | attfdwoptions
----------+----------+----------+---------------+--------+--------+----------+-------------+-----------+----------+------------+----------+------------+-----------+--------------+------------+-------------+--------------+--------+------------+---------------
    33433 | tableoid |       26 |             0 |      4 |     -7 |        0 |          -1 |        -1 | t        | p          | i        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | cmax     |       29 |             0 |      4 |     -6 |        0 |          -1 |        -1 | t        | p          | i        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | xmax     |       28 |             0 |      4 |     -5 |        0 |          -1 |        -1 | t        | p          | i        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | cmin     |       29 |             0 |      4 |     -4 |        0 |          -1 |        -1 | t        | p          | i        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | xmin     |       28 |             0 |      4 |     -3 |        0 |          -1 |        -1 | t        | p          | i        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | ctid     |       27 |             0 |      6 |     -1 |        0 |          -1 |        -1 | f        | p          | s        | t          | f         | f            | t          |           0 |            0 |        |            |
    33433 | id       |       23 |            -1 |      4 |      1 |        0 |          -1 |        -1 | t        | p          | i        | f          | f         | f            | t          |           0 |            0 |        |            |
    33433 | date     |     1114 |            -1 |      8 |      2 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |            0 |        |            |
(8 rows)

 

可以發現有6個隱藏的欄位,其中cmax xmax cmin xmin都跟事物有關,在PG事物處理相關文章中可以經常看到。

恰好前段時間研究PG表去重覆數據用過ctid,物理地址塊上的編號,因此今天再來學習一下tableoid。

 

3)初步分析結果:

   A. 存磁碟的時候,數據是一行一行的存儲,有必要知道該行數據屬於哪個表。(那麼如果支持列存儲的話,確實可以對這些數據進行壓縮了,只存一條即可。)

   B. 繼承表的情況,知道數據是在哪個子表裡面。

 

4)視圖不會有預設欄位:

apple=# select * from pg_attribute where attrelid in (select oid from pg_class where relname in (select viewname from pg_views)) and attnum < 0;
 attrelid | attname | atttypid | attstattarget | attlen | attnum | attndims | attcacheoff | atttypmod | attbyval | attstorage | attalign | attnotnull | atthasdef | attisdropped | attislocal | attinhcount | attcollation | attacl | attoptions | attfdwoptions
----------+---------+----------+---------------+--------+--------+----------+-------------+-----------+----------+------------+----------+------------+-----------+--------------+------------+-------------+--------------+--------+------------+---------------
(0 rows)

 

5)以後想查看表的oid再也不用去pg_class裡面找了:

apple=# select tableoid from test_time;
 tableoid
----------
    33433
(1 row)

 

搞了半天發現也沒啥,白折騰了......

 

參考消息:

每個表都有幾個系統欄位,這些欄位是由系統隱含定義的。 因此,這些名字不能用於用戶定義的欄位名。 (請註意這些限制與這個名字是否關鍵字無關;把名字用引號括起來並不能讓你逃離這些限制。) 你實際上不需要註意這些欄位,只要知道它們存在就可以了。

oid
行的對象標識符(對象 ID)。這個欄位只有在創建表的時候使用了 WITH OIDS,或者是設置了配置參數 default_with_oids 時出現。 這個欄位的類型是 oid(和欄位同名); 參閱Section 8.12 獲取有關這種類型的更多信息。
tableoid
包含本行的表的 OID。這個欄位對那些從繼承層次中選取的查詢特別有用(參閱 Section 5.8), 因為如果沒有它的話,我們就很難說明一行來自哪個獨立的表。 tableoid 可以和pg_class 的 oid 欄位連接起來獲取表名字。

xmin
插入該行版本的事務的標識(事務 ID)。(註意:在這個環境里, 一個行版本是一行的一個狀態;一行的每次更新都為同一個邏輯行創建一個新的行版本。)

cmin
在插入事務內部的命令標識(從零開始)。

xmax
刪除事務的標識(事務ID),如果不是被刪除的行版本,那麼是零。 在一個可見行版本里,這個欄位有可能是非零。這通常意味著刪除事務還沒有提交, 或者是一個刪除的企圖被回滾掉了。

cmax
在刪除事務內部的命令標識符,或者是零。

ctid
一個行版本在它所處的表內的物理位置。請註意,儘管 ctid 可以用於非常快速地定位行版本,但每次 VACUUM FULL 之後, 一個行的 ctid 都會被更新或者移動。 因此 ctid 是不能作為長期的行標識符的。 應該使用OID,或者更好是用戶定義的序列號,來標識一個邏輯行。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 《SQL Server 從入門到精通》 第1章 資料庫基礎 1.2 資料庫的體繫結構 1.2.1 資料庫三級模式結構 1. 模式 模式也稱邏輯模式或概念模式,它是資料庫中 ,是所有用戶的公共數據視圖。一個資料庫只有一個模式,模式處於三級結構的中間層。 2. 外模式 外模式也稱用戶模式,它是 ,`是數 ...
  • 在MS SQL Server中,我們想判斷一個字元串中是否包含有特殊字元。由於徨字元集過多,我們可以使用正則來實現。除了大小字母和數字之外全是特殊字元,因此可以使用這個表達式:[^a-zA-Z0-9]參考下麵代碼示例: ...
  • 昨晚有實現一個小功能,就是在MS SQL Server中,檢查字元串是否包含有大小寫字母。通常應用在字元串的複雜度。 DECLARE @s NVARCHAR(40) = N'SDFfgGRYJhhTYUJ' IF LOWER(@s) COLLATE Latin1_General_CS_AS <> @ ...
  • 在SQL Server中啟用CLR,可以執行下麵SQL語句: EXEC sp_configure 'clr enabled'; EXEC sp_configure 'clr enabled' , '1'; RECONFIGURE; ...
  • 1. 找到MySQL的配置文件,一般在MySQL的安裝目錄下,例如我的: C:\Program Files\MySQL\MySQL Server 5.7 ,打開下麵的一個配置文件: my-default.ini ,在最後面添加一行配置: show_compatibility_56 = 1 。 2. ... ...
  • zookeeper的安裝(圖文詳解。。。來點擊哦!) 一、伺服器的配置 三台伺服器: 192.168.83.133 sunshine 192.168.83.134 sunshineMin 192.168.83.135 sunshineMax 在每台伺服器的hosts文件中添加:(命令:vi /etc ...
  • MongoDB的訪問控制能夠有效保證資料庫的安全,訪問控制是指綁定Application監聽的IP地址,設置監聽埠,使用賬戶和密碼登錄 一,訪問控制的參數 1,綁定IP地址 mongod 參數:--bind_ip <ip address> 預設值是所有的IP地址都能訪問,該參數指定MongoDB對 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/6008477.html 關於統計信息對數據行數做預估,之前寫過對非相關列(單獨或者單獨的索引列)進行預估時候的演算法,參考這裡。 今天來寫一下統計信息對於複合索引在預估時候的計算方法和潛在問題。 本文原形來自於是個實際業務問題, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...