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)該使用主鍵來(lái)標(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 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例
這篇文章主要介紹了PostgreSql 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PostgreSQL13基于流復(fù)制搭建后備服務(wù)器的方法
這篇文章主要介紹了PostgreSQL13基于流復(fù)制搭建后備服務(wù)器,后備服務(wù)器作為主服務(wù)器的數(shù)據(jù)備份,可以保障數(shù)據(jù)不丟,而且在主服務(wù)器發(fā)生故障后可以提升為主服務(wù)器繼續(xù)提供服務(wù)。需要的朋友可以參考下2022-01-01
Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作
這篇文章主要介紹了Postgresql 存儲(chǔ)過(guò)程(plpgsql)兩層for循環(huán)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
PostgreSQL教程(六):函數(shù)和操作符詳解(2)
這篇文章主要介紹了PostgreSQL教程(六):函數(shù)和操作符詳解(2),本文講解了模式匹配、數(shù)據(jù)類型格式化函數(shù)、時(shí)間/日期函數(shù)和操作符等內(nèi)容,需要的朋友可以參考下2015-05-05
PostgreSQL使用MySQL作為外部表(mysql_fdw)
PostgreSQL 提供了一種訪問(wèn)和操作外部數(shù)據(jù)源的機(jī)制,稱為外部數(shù)據(jù)包裝器,本文主要給大家介紹了PostgreSQL使用MySQL作為外部表的方法,感興趣的朋友跟隨小編一起看看吧2022-11-11
PostgreSQL數(shù)據(jù)庫(kù)如何定期清理歸檔(pg_wal)日志
在?般的?產(chǎn)環(huán)境中,數(shù)據(jù)庫(kù)都需要開啟歸檔模式,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫(kù)如何定期清理歸檔(pg_wal)日志的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
PostgreSQL關(guān)閉數(shù)據(jù)庫(kù)服務(wù)的三種模式
PostgreSQL 提供了三種關(guān)閉數(shù)據(jù)庫(kù)服務(wù)的不同方式,它們最終都是發(fā)送一個(gè)關(guān)閉信號(hào)到 postgres 主服務(wù)進(jìn)程,本文將給大家詳細(xì)的介紹一下這三種模式,需要的朋友可以參考下2024-07-07
PostgreSQL向數(shù)據(jù)庫(kù)表中添加行數(shù)據(jù)的操作
這篇文章主要介紹了PostgreSQL向數(shù)據(jù)庫(kù)表中添加行數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
PostgreSQL基礎(chǔ)知識(shí)之SQL操作符實(shí)踐指南
這篇文章主要給大家介紹了關(guān)于PostgreSQL基礎(chǔ)知識(shí)之SQL操作符實(shí)踐的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

