PostgreSQL 定位索引损坏位置
接上文:https://blog.csdn.net/Gents_hu/article/details/153681207
有些朋友不清楚怎么定位索引损坏的位置,这里给大家讲下如何定位
首先需要安装插件
CREATE EXTENSION amcheck;接着:
使用SQL定位到错误的TID
SELECT bt_index_check('public.idx_name', true);ERROR: item order invariant violated for index "idx_name" DETAIL: Lower index tid=(28536,38) (points to heap tid=(45249,64)) higher index tid=(28536,39) (points to heap tid=(5223,85)) page lsn=25CE/4DD8C170.在使用TID取报错数据
SELECTt.ctid, t.name, encode(convert_to(t.name,'UTF8'),'hex') AS hex
FROM public.table_closeout t
WHERE t.ctid IN ('(98046,42)'::tid, '(44746,13)'::tid)
ORDER BY t.name COLLATE "default";ctid    |    name     |          hex           
------------+-------------+------------------------(44746,13) | 0091  | 3030393174762e636f6d(98046,42) | 009-1 | 3030392d3174762e636f6d
(2 rows)这样,我们就能看到具体的报错位置了,接下来就能继续分析了
