PostgreSQL的CTID
PostgreSQL的CTID和Oracle的ROWID 類似.
CTID欄位存在於PostgresSQL表中,它對於表中的每條記錄始終是唯一的。 它表示資料的物理位置。
我們來建立一個簡單的表來驗證一下上述概念.
dump=# CREATE TABLE events(id SERIAL); CREATE TABLE dump=# INSERT INTO events SELECT generate_series(1,10); INSERT 0 10 dump=# select ctid,* from events; (0,1) | 1 (0,2) | 2 (0,3) | 3 (0,4) | 4 (0,5) | 5 (0,6) | 6 (0,7) | 7 (0,8) | 8 (0,9) | 9 (0,10) | 10
這裡的CTID第一個值(0,1),第一個0代表頁碼,第二個1代表行號。
dump=# delete from events where id=1; DELETE 1 dump=# select ctid,* from events ; (0,2) | 2 (0,3) | 3 (0,4) | 4 (0,5) | 5 (0,6) | 6 (0,7) | 7 (0,8) | 8 (0,9) | 9 (0,10) | 10 dump=# insert into events values(1); INSERT 0 1 dump=# select ctid,* from events ; (0,2) | 2 (0,3) | 3 (0,4) | 4 (0,5) | 5 (0,6) | 6 (0,7) | 7 (0,8) | 8 (0,9) | 9 (0,10) | 10 (0,11) | 1
刪除了以後,重新insert被刪除的行,會發現此行放在0頁的最後一行
dump=# update events set id=12 where id=2; UPDATE 1 dump=# select ctid,* from events ; (0,3) | 3 (0,4) | 4 (0,5) | 5 (0,6) | 6 (0,7) | 7 (0,8) | 8 (0,9) | 9 (0,10) | 10 (0,11) | 1 (0,12) | 12
更新了以後,會發現被更新的行放在0頁的最後一行
dump=# vacuum events; VACUUM dump=# select ctid,* from events ; (0,3) | 3 (0,4) | 4 (0,5) | 5 (0,6) | 6 (0,7) | 7 (0,8) | 8 (0,9) | 9 (0,10) | 10 (0,11) | 1 (0,12) | 12
vacuum操作並不改變ctid值
dump=# vacuum full events; VACUUM dump=# select ctid,* from events ; (0,1) | 3 (0,2) | 4 (0,3) | 5 (0,4) | 6 (0,5) | 7 (0,6) | 8 (0,7) | 9 (0,8) | 10 (0,9) | 1 (0,10) | 12 dump=#
vacuum full操作使得資料被重新分佈,ctid的值被reset
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/725820/viewspace-2935830/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL-PostgreSQL中的public(九)SQL
- 【PostgreSQL 】PostgreSQL 15對distinct的優化SQL優化
- PostgreSQl的MVCCSQLMVC
- Postgresql 的CheckpointSQL
- postgresql關於postgresql.auto.conf和postgresql.conf的區別SQL
- POSTGRESQL postgresql 升級的需求來自哪裡SQL
- Postgresql的CURSOR SHARINGSQL
- PostgreSQL的常用索引SQL索引
- PostgreSQL的vacuum流程SQL
- PostgreSQL的wal_buffersSQL
- 前%的處理--PostgreSQLSQL
- PostgreSQL的 "OAR-01555"?SQL
- PostgreSQL中的繼承SQL繼承
- PostgreSQL DBA(45) - Hypothetical Indexes in PostgreSQLSQLIndex
- PostgreSQLSQL
- PostgreSQL:WITHSQL
- PostgreSQL的MVCC vs InnoDB的MVCCSQLMVC
- PostgreSQL:Redhat 8.5 + PostgreSQL 14.5 安裝SQLRedhat
- PostgreSQL DBA(181) - Using PostgreSQL as a Data WarehouseSQL
- PostgreSQL DBA(133) - Extension(postgresql_anonymizer)SQL
- PostgreSQL-15的 \watch命令SQL
- PostgreSQL的那點事兒SQL
- PostgreSQL的B-tree索引SQL索引
- PostgreSQL的兩個模板庫SQL
- Postgresql與MySQL的區別MySql
- Ubuntu下PostgreSQL的安裝UbuntuSQL
- PostgreSQL基於PG內建流複製的,靠譜的PostgreSQL高可用方案SQL
- PostgreSQL核心SQL
- PostgreSQL:COPYSQL
- Hacking PostgreSQLSQL
- PostgreSQL:鎖SQL
- PostgreSQL:EXPLAINSQLAI
- PostgreSQL:INDEXSQLIndex
- PostgreSQL:表SQL
- PostgreSQL:RULESQL
- PostgreSQL DBA(142) - PG 12(Monitoring PostgreSQL VACUUM processes)SQL
- PostgreSQL中的複製延遲SQL
- 構建自己的postgresql rpm包SQL