postgresql中的ctid解讀
postgresql中的ctid
ctid表示
數(shù)據(jù)行在它所處的表內(nèi)的物理位置,ctid字段的類型是tid。
盡管ctid可以快速定位數(shù)據(jù)行,每次vacuum full之后,數(shù)據(jù)行在塊內(nèi)的物理位置就會移動,即ctid會發(fā)生變化,所以ctid不能作為長期的行標(biāo)識符,應(yīng)該使用主鍵來標(biāo)識一個邏輯行。
查看ctid
示例如下:
mydb=# select ctid,id from t1 ; ctid | id -------+---- (0,1) | 10 (0,2) | 11 (2 rows)
由上可知,ctid由兩個數(shù)字組成,第一個數(shù)字表示物理塊號,第二個數(shù)字表示在物理塊中的行號。tid類型可以使用字符串輸入,如想查詢表t1中0號物理塊中第11行內(nèi)容,
示例如下:
mydb=# select ctid,id from t1 where ctid='(0,11)'; ctid | id --------+---- (0,11) | 19 (1 row)
利用ctid可以刪除一個表中的重復(fù)數(shù)據(jù),
例如表t1有以下數(shù)據(jù)
mydb=# select id,count(*) from t1 group by id; id | count ----+------- 34 | 2 43 | 2 25 | 2 32 | 2 12 | 1 1 | 1 10 | 1 26 | 2 42 | 2 11 | 1 18 | 1 16 | 1 39 | 2 54 | 2 47 | 2 13 | 1 49 | 2 22 | 3 24 | 2 14 | 1 45 | 2 46 | 2 27 | 2 48 | 2 55 | 2 17 | 1 28 | 2 36 | 2 15 | 1 38 | 2 30 | 2 50 | 2 33 | 2 40 | 2 56 | 2 53 | 2 19 | 1 29 | 2 21 | 1 57 | 2 51 | 2 23 | 2 41 | 2 31 | 2 35 | 2 52 | 2 20 | 1 44 | 2 37 | 2 (49 rows)
刪除重復(fù)數(shù)據(jù)的SQL為:
mydb=# delete from t1 a where a.ctid <>(select min(b.ctid) from t1 b where a.id=b.id); DELETE 37 mydb=# select id,count(*) from t1 group by id; id | count ----+------- 34 | 1 43 | 1 25 | 1 32 | 1 12 | 1 1 | 1 10 | 1 26 | 1 42 | 1 11 | 1 18 | 1 16 | 1 39 | 1 54 | 1 47 | 1 13 | 1 49 | 1 22 | 1 24 | 1 14 | 1 45 | 1 46 | 1 27 | 1 48 | 1 55 | 1 17 | 1 28 | 1 36 | 1 15 | 1 38 | 1 30 | 1 50 | 1 33 | 1 40 | 1 56 | 1 53 | 1 19 | 1 29 | 1 21 | 1 57 | 1 51 | 1 23 | 1 41 | 1 31 | 1 35 | 1 52 | 1 20 | 1 44 | 1 37 | 1 (49 rows)
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Postgresql數(shù)據(jù)庫角色創(chuàng)建登錄詳解
這篇文章主要為大家介紹了Postgresql數(shù)據(jù)庫角色創(chuàng)建登錄詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02postgresql限制某個用戶僅連接某一個數(shù)據(jù)庫的操作
這篇文章主要介紹了postgresql限制某個用戶僅連接某一個數(shù)據(jù)庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志
在?般的?產(chǎn)環(huán)境中,數(shù)據(jù)庫都需要開啟歸檔模式,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-05-05PostgreSQL中查看當(dāng)前時間和日期的幾種常用方法
在 PostgreSQL 中,有多個函數(shù)可以用來查看當(dāng)前時間和日期,這些函數(shù)在處理時間戳、日期和時間的計算時非常有用,以下是幾種常用的查看當(dāng)前時間和日期的函數(shù)及示例,需要的朋友可以參考下2024-10-10PostgreSQL基礎(chǔ)知識之SQL操作符實踐指南
這篇文章主要給大家介紹了關(guān)于PostgreSQL基礎(chǔ)知識之SQL操作符實踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05psql 執(zhí)行文件 permission denied的解決
這篇文章主要介紹了psql 執(zhí)行文件 permission denied的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01