我们有一个数据库,里面装满了类型的字符串
无法写入块。EOM设备。dev=$device($device_path)
然后,我们有一个生成日志条目的程序,比如
2013-10-10 15:37:07program-sd JobId 50345:致命错误:块。c:434无法写入块。EOM设备。dev="st0"(/dev/st0)
因此,我们可以使用SELECT * FROM X WHERE Y LIKE="%LOG%"
,但字符串不相同,在我们的数据库中,我们有一个干净的字符串,而在我们的日志中,我们拥有时间戳、更多信息以及$device
和$device_path
的数据,因此查询将返回0个结果,因为两者都不匹配。。。
我们试图根据数据库中的内容返回错误代码,在本例中,如果查询结果不是0,则返回的错误代码为RC: 1019
…
有没有什么方法可以使用regex或其他东西来实现这一点?
假设您的错误消息模板表如下所示:
create table error_templates(id serial primary key, template text);
然后你可以使用这样的查询:
select id
from error_templates
where $1 like '%' || regexp_replace(template, '$w+', '%', 'g') || '%';
$1是您试图查找的错误日志的占位符。
regex_replace将消息中的变量替换为%。它假设变量由一个美元符号和一个或多个单词字符(a-zA-Z0-9_)组成——您可能需要根据实际的变量名称进行调整。
还要注意,这可能很慢。它必须扫描整个表格;不能使用索引。