【发布时间】:2021-11-30 08:05:54
【问题描述】:
因此,在最近的 Twitch 泄露事件之后,每个人都在讨论他们最喜欢的不良代码。突出的一点是a single monster SQL statement 发现“非法条款”。这让我开始思考如何“正确”实现这一点。
所以你有一个字符串表,你想匹配子字符串,你如何在 PL/pgSQL 中编写它?我假设任何 SQL 实现都应该具有为此类元编程创建函数/过程的过程能力,基本上创建和执行 SQL,如下所示:
admin@localhost:words> SELECT 'XabcY' LIKE '%abc%' OR 'XabcY' LIKE '%xyz%' as matches;
+-----------+
| matches |
|-----------|
| True |
+-----------+
所以更具体地说,给定表disallowed中的字符串列表:
| illegal_string |
|----------------|
| stupid |
| witless |
| moron |
| commie-lover |
如果其中任何一个与给定字符串匹配,您将如何在 PL/pgSQL 中创建一个动态查询,该查询在执行时返回 true?它不需要在 Twitch 中使用 ILIKE 来检查给定的单词是否包含子字符串,因此使用 position 也可以,但使用 gin 索引等应该是高性能/可调的。
【问题讨论】:
标签: sql postgresql plpgsql