是否有一种简单的特殊方法可以对表的所有文本列执行ILIKE
查询?
我知道有一个单元格包含";foobar";。但是该表有很多列,只有50k行,所以搜索所有列和行应该很快。
我给出这个查询时,要理解这不是用于性能的东西,只是回填和清理(这里似乎是这样(:
SELECT *
FROM tablename foo
WHERE LOWER(foo::text) LIKE '%foobar%'
如果您想实现一些性能适中的自由文本搜索,您需要完成创建索引tsvector/weighted tsvector列的工作。
为了明确起见,您可以编写:
SELECT *
FROM tablename foo
WHERE foo.*::text ILIKE '%foobar%';
具有相同名称的嵌套列(在本例中为foo
(将优先。更详细的语法foo.*
使其成为对表行的明确引用。
关于LIKE
与ILIKE
(以及索引支持(:
- LOWER LIKE vs iLIKE
密切相关:
- SQL:在表的几列中搜索关键字
- PostgreSQL:将行强制转换为类型
对于更有针对性的搜索(不符合"特别"要求(,要在搜索中只包括字符串类型的列,并排除上述可能产生的角大小写误报,可以使用以下动态SQL:
- 用null值替换空字符串