我们有一个包含类型字符串的数据库:
无法写入块。EOM的设备。dev=$device ($device_path)
然后,我们有了生成日志条目的程序,例如
2013年-10-10 15:37:07程序-sd JobId 50345:致命错误: block.c:434不能写块.EOM的设备。dev="st0“(/dev/st0)
所以,我们可以使用SELECT * FROM X WHERE Y LIKE="%LOG%",但是,字符串是不一样的,在我们的数据库中,我们有一个干净的字符串,而在日志中,我们有时间戳、更多的信息以及$device和$device_path的数据,所以查询将返回0结果,因为两者都不匹配.
我们试图根据数据库中的内容返回一个错误代码,如果查询的结果不是0.
有什么方法可以用regex或者别的什么方法来完成这个任务吗?
发布于 2013-12-05 11:41:17
假设您的错误消息模板表如下所示:
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_) --您可能需要根据实际变量名来调整它。
还请注意,这可能是缓慢的。它必须扫描整个表;不能使用索引。
https://stackoverflow.com/questions/20396283
复制相似问题