¿Hay alguna manera de indexar útilmente una columna de texto que contenga patrones de expresiones regulares?

Estoy usando PostgreSQL, actualmente la versión 9.2 pero estoy abierto a la actualización.

En una de mis tablas, tengo una columna de tipotext que almacena patrones de expresiones regulares.

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

Luego hago consultas al respecto de esta manera:

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

Entiendo que esto es un revésLIKE o coincidencia de patrón inverso. Si fuera la otra forma más común, si mi pajar estaba en la base de datos y mi aguja estaba anclada, podría usar un índice btree de manera más o menos efectiva dependiendo del patrón de búsqueda y los datos exactos.

Pero los datos que tengo son una tabla de patrones y otros datos asociados con los patrones. Necesito preguntarle a la base de datos qué filas tienen patrones que coinciden con el texto de mi consulta. ¿Hay alguna manera de hacer esto más eficiente que un escaneo secuencial que verifica cada fila de mi tabla?

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

Entiendo que esto es un revésLIKE o coincidencia de patrón inverso. Si fuera la otra forma más común, si mi pajar estaba en la base de datos y mi aguja estaba anclada, podría usar un índice btree de manera más o menos efectiva dependiendo del patrón de búsqueda y los datos exactos.

Pero los datos que tengo son una tabla de patrones y otros datos asociados con los patrones. Necesito preguntarle a la base de datos qué filas tienen patrones que coinciden con el texto de mi consulta. ¿Hay alguna manera de hacer esto más eficiente que un escaneo secuencial que verifica cada fila de mi tabla?

Respuestas a la pregunta(1)

Su respuesta a la pregunta