PostgreSQL 索引如何引用行?
How do PostgreSQL indexes reference rows?
PG中的索引是存储某种类型的行内部ID,还是存储行的主键?
我推断它一定是一个内部行 ID,因为表不必有 PK。但是,我找不到这个问题的具体答案。
每一行都有一个内部的"address"存储在系统列ctid
中(非常类似于Oracle的rowid
)。这个ctid值存储在索引中。
手册中有更多详细信息:
- https://www.postgresql.org/docs/current/static/ddl-system-columns.html
- https://www.postgresql.org/docs/current/static/storage-page-layout.html#HEAPTUPLEHEADERDATA-TABLE
如果需要,您可以 select 列:
select ctid, t.*
from your_table t;
PG中的索引是存储某种类型的行内部ID,还是存储行的主键?
我推断它一定是一个内部行 ID,因为表不必有 PK。但是,我找不到这个问题的具体答案。
每一行都有一个内部的"address"存储在系统列ctid
中(非常类似于Oracle的rowid
)。这个ctid值存储在索引中。
手册中有更多详细信息:
- https://www.postgresql.org/docs/current/static/ddl-system-columns.html
- https://www.postgresql.org/docs/current/static/storage-page-layout.html#HEAPTUPLEHEADERDATA-TABLE
如果需要,您可以 select 列:
select ctid, t.*
from your_table t;