PostgreSQL:仅匹配整词的模式

PostgreSQL:仅匹配整词的模式,sql,string,postgresql,Sql,String,Postgresql,我有一个queries表,其中包含数百个SQL查询,我正在尝试筛选出只能在我使用的DB上执行的查询。因为其中一些查询引用的表只存在于另一个数据库中,所以只能成功执行其中的一小部分 到目前为止,我的查询如下所示: 选择rr.name作为查询名称, 选择string_aggit.table_name::character variabling,','ORDER BY it.table_name 从信息_schema.tables中选择它 其中rr.config->>“查询”类似于“%”| | it.

我有一个queries表,其中包含数百个SQL查询,我正在尝试筛选出只能在我使用的DB上执行的查询。因为其中一些查询引用的表只存在于另一个数据库中,所以只能成功执行其中的一小部分

到目前为止,我的查询如下所示:

选择rr.name作为查询名称, 选择string_aggit.table_name::character variabling,','ORDER BY it.table_name 从信息_schema.tables中选择它 其中rr.config->>“查询”类似于“%”| | it.table_name | |“%” 如相关表格所示 来自查询rr 它确实工作得很好,除了我提供的模式不是过滤边缘情况的最佳模式

假设有一个名为customers_的表归档在旧数据库中,而新数据库中不存在该表,还有一个名为customers的表存在于旧数据库和新数据库中

现在,在我编写的查询中,引擎认为,我有一个名为customers的表,因此任何包含customers一词的查询都必须是有效的,但引擎是错误的,因为它还选择了包含customers\u存档表的查询,该表不存在于该数据库中


因此,我尝试只匹配整个单词,但无法使其工作,因为就我而言,\ character在PGSQL中不起作用。如何才能让这个查询完成我试图实现的任务?

除了构建完整的PostgreSQL解析器之外,没有完全可靠的方法来查找查询引用的表。对于初学者,名称可以出现在字符串文本中,或者查询可以是

DO $$BEGIN EXECUTE 'SELECT * FROM my' || 'table'; END;$$;
但我认为如果你能确保你的名字周围有非单词字符,你会过得更好:

WHERE rr.config ->> 'queries' ~ '\y' || it.table_name || '\y'

在where子句中,如“%”| | it.table | | name | |‘%”中的表格前后的Concat空格作为相关表格祝贺您获得了100k!啊啊。。。我听说曾经有一段时间,当你取得这样的成就时,SO会提供好东西。。。但是你和我!看来我参加那个聚会迟到了。