Есть ли способ полезного индексирования текстового столбца, содержащего шаблоны регулярных выражений?

Я использую PostgreSQL, в настоящее время версия 9.2, но я открыт для обновления.

В одной из моих таблиц у меня есть столбец типаtext который хранит шаблоны регулярных выражений.

CREATE TABLE foo (
    id serial,
    pattern text,
    PRIMARY KEY(id)
);
CREATE INDEX foo_pattern_idx ON foo(pattern);

Затем я делаю запросы на это так:

INSERT INTO foo (pattern) VALUES ('^abc.*

Я понимаю, что это как бы наоборотLIKE или обратное совпадение Если бы это был другой, более распространенный способ, если мой стог сена был в базе данных, а моя игла была на якоре, я мог бы более или менее эффективно использовать индекс btree в зависимости от точного шаблона поиска и данных.

Но данные, которые у меня есть, представляют собой таблицу шаблонов и другие данные, связанные с шаблонами. Мне нужно спросить базу данных, какие строки имеют шаблоны, соответствующие тексту моего запроса. Есть ли способ сделать это более эффективным, чем последовательное сканирование, которое проверяет каждую строку в моей таблице?

); SELECT * FROM foo WHERE 'abc literal string' ~ pattern;

Я понимаю, что это как бы наоборотLIKE или обратное совпадение Если бы это был другой, более распространенный способ, если мой стог сена был в базе данных, а моя игла была на якоре, я мог бы более или менее эффективно использовать индекс btree в зависимости от точного шаблона поиска и данных.

Но данные, которые у меня есть, представляют собой таблицу шаблонов и другие данные, связанные с шаблонами. Мне нужно спросить базу данных, какие строки имеют шаблоны, соответствующие тексту моего запроса. Есть ли способ сделать это более эффективным, чем последовательное сканирование, которое проверяет каждую строку в моей таблице?

Ответы на вопрос(1)

Ваш ответ на вопрос