postgresql中的ctid解讀
postgresql中的ctid
ctid表示
數(shù)據(jù)行在它所處的表內(nèi)的物理位置,ctid字段的類型是tid。
盡管ctid可以快速定位數(shù)據(jù)行,每次vacuum full之后,數(shù)據(jù)行在塊內(nèi)的物理位置就會(huì)移動(dòng),即ctid會(huì)發(fā)生變化,所以ctid不能作為長(zhǎng)期的行標(biāo)識(shí)符,應(yīng)該使用主鍵來標(biāo)識(shí)一個(gè)邏輯行。
查看ctid
示例如下:
mydb=# select ctid,id from t1 ; ctid | id -------+---- (0,1) | 10 (0,2) | 11 (2 rows)
由上可知,ctid由兩個(gè)數(shù)字組成,第一個(gè)數(shù)字表示物理塊號(hào),第二個(gè)數(shù)字表示在物理塊中的行號(hào)。tid類型可以使用字符串輸入,如想查詢表t1中0號(hào)物理塊中第11行內(nèi)容,
示例如下:
mydb=# select ctid,id from t1 where ctid='(0,11)'; ctid | id --------+---- (0,11) | 19 (1 row)
利用ctid可以刪除一個(gè)表中的重復(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Postgresql數(shù)據(jù)庫(kù)角色創(chuàng)建登錄詳解
這篇文章主要為大家介紹了Postgresql數(shù)據(jù)庫(kù)角色創(chuàng)建登錄詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02PostgreSQL自動(dòng)更新時(shí)間戳實(shí)例代碼
最近有這么一個(gè)工程,需要使用postgresql數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中的好幾個(gè)表中都需要時(shí)間戳這個(gè)字段,這篇文章主要給大家介紹了關(guān)于PostgreSQL自動(dòng)更新時(shí)間戳的相關(guān)資料,需要的朋友可以參考下2021-11-11postgresql限制某個(gè)用戶僅連接某一個(gè)數(shù)據(jù)庫(kù)的操作
這篇文章主要介紹了postgresql限制某個(gè)用戶僅連接某一個(gè)數(shù)據(jù)庫(kù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL數(shù)據(jù)庫(kù)如何定期清理歸檔(pg_wal)日志
在?般的?產(chǎn)環(huán)境中,數(shù)據(jù)庫(kù)都需要開啟歸檔模式,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫(kù)如何定期清理歸檔(pg_wal)日志的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05PostgreSQL中查看當(dāng)前時(shí)間和日期的幾種常用方法
在 PostgreSQL 中,有多個(gè)函數(shù)可以用來查看當(dāng)前時(shí)間和日期,這些函數(shù)在處理時(shí)間戳、日期和時(shí)間的計(jì)算時(shí)非常有用,以下是幾種常用的查看當(dāng)前時(shí)間和日期的函數(shù)及示例,需要的朋友可以參考下2024-10-10PostgreSQL基礎(chǔ)知識(shí)之SQL操作符實(shí)踐指南
這篇文章主要給大家介紹了關(guān)于PostgreSQL基礎(chǔ)知識(shí)之SQL操作符實(shí)踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05psql 執(zhí)行文件 permission denied的解決
這篇文章主要介紹了psql 執(zhí)行文件 permission denied的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01