postgresql: читать содержимое индекса GIN
Я хотел бы прочитать список триграмм, предположительно созданный с помощью моего индекса GIN, но, похоже, нигде не могу найти команду: я пытался \di+
, \dv+
, \dm+
или каждый без +
, Ничего не возвращается
Я что-то неправильно понимаю или мой индекс пуст? Это показывает размер 16ko, но это может быть пустой стандартный размер, насколько я знаю.
2 ответа
Невозможно увидеть данные, хранящиеся в индексе, используя обычный SQL (а команды psql с обратной косой чертой просто переводятся в SQL).
Если вы хотите проверить внутренние блоки индекса, вам нужно установить расширение pageinspect, которое также имеет некоторые функции специально для индексов GIN.
Есть косвенный способ получить эту информацию, но только если вы используете индекс GIN для столбца tsvector.
Структура таблицы
CREATE TABLE bench(
id bigserial,
f1 text,
f2 text,
f3 text,
f4 text
);
Заполните таблицу скамейки некоторыми данными. Добавьте столбец tsvector и обновите его:
ALTER TABLE bench
ADD COLUMN ts tsvector;
UPDATE bench
SET ts =
strip(to_tsvector('simple',coalesce(f1,''))
||to_tsvector('simple',coalesce(f2,''))
||to_tsvector('simple',coalesce(f3,''))
||to_tsvector('simple',coalesce(f4,''))
)
;
Создайте индекс GIN
CREATE INDEX ooz_gin ON bench USING GIN (ts) WITH (fastupdate=on);
Перечислите все известные слова в столбце ts (и, следовательно, в указателе) и их триграммы:
SELECT word,show_trgm(word) as trigrams
FROM ts_stat('SELECT ts FROM bench');
Результат (с моими тестовыми данными):
word | trigrams
---------------------+-----------------------------------------------------------------------------------------
zworykin | {" z"," zw","in ",kin,ory,ryk,wor,yki,zwo}
zulu | {" z"," zu","lu ",ulu,zul}
zorch | {" z"," zo","ch ",orc,rch,zor}
zoning | {" z"," zo",ing,"ng ",nin,oni,zon}
zips | {" z"," zi",ips,"ps ",zip}
zipping | {" z"," zi",ing,ipp,"ng ",pin,ppi,zip}
zippered | {" z"," zi","ed ",ere,ipp,per,ppe,red,zip}
ziploc | {" z"," zi",ipl,loc,"oc ",plo,zip}
zion | {" z"," zi",ion,"on ",zio}