【发布时间】:2016-04-02 23:11:14
【问题描述】:
我使用的是 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.*$');
SELECT * FROM foo WHERE 'abc literal string' ~ pattern;
我知道这是一种反向 LIKE 或反向模式匹配。如果是另一种更常见的方式,如果我的干草堆在数据库中,并且我的针被锚定,我可以根据确切的搜索模式和数据或多或少有效地使用 btree 索引。
但我拥有的数据是一个模式表和与模式相关的其他数据。我需要询问数据库哪些行的模式与我的查询文本匹配。有没有办法比检查表中每一行的顺序扫描更有效?
【问题讨论】:
标签: regex postgresql indexing pattern-matching operators