postgresql和log之间的字符串比较



我们有一个数据库,里面装满了类型的字符串

无法写入块。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_)组成——您可能需要根据实际的变量名称进行调整。

还要注意,这可能很慢。它必须扫描整个表格;不能使用索引。

最新更新