从Postgresql中不带引号的搜索路径中提取第一个模式

从Postgresql中不带引号的搜索路径中提取第一个模式,postgresql,Postgresql,我想使用postgres本身从postgres搜索路径中提取第一个模式。实际函数需要在更大的SELECT中工作,作为WHERE子句中的一个条件: SELECT * from something WHERE domain_hash = THEFUNCTION AND etc... 搜索路径将始终类似于: "068503358dddd23c",spikeadmin 我希望函数返回不带引号的068503358dd23c 我认为正则表达式可能是合适的?问题是,PostgreSQL有一个quote\u

我想使用postgres本身从postgres搜索路径中提取第一个模式。实际函数需要在更大的SELECT中工作,作为WHERE子句中的一个条件:

SELECT * from something WHERE domain_hash = THEFUNCTION AND etc...
搜索路径将始终类似于:

"068503358dddd23c",spikeadmin
我希望函数返回不带引号的
068503358dd23c


我认为正则表达式可能是合适的?

问题是,PostgreSQL有一个
quote\u ident
函数,但没有合适的unquote函数。而
“068503358DD23C”
quote_ident
的输出

所以你可以做些别的事情:

SELECT * FROM something 
    WHERE 
        quote_ident(domainhash) = split_part(current_setting('search_path'), ',', 1)
        AND /* whatever */

如果架构中有
,则此操作将不起作用。但是对于hexcodes,这应该不是问题。

您是说函数调用中的函数()?另外,您要查找的值也是用户名吗?第二部分似乎是一个奇怪的问题,但似乎此架构名称可能与当前登录的用户相关,因为您暗示它是可变的。该架构是可变的,但来自另一个数据库字段,该字段与Rails应用程序中访问的主机名相关。由于函数我非常松散,我希望可以用类似于公认答案的方法来解决:)谢谢你的解释:)不幸的是,这是Rails模型中has_one的一个条件,出于某种原因,当我试图传递我从Rails本身(通过它的schema_search_path方法)中获得的域哈希时它试图在奇怪的时候调用它,因为搜索路径中没有正确的信息,所以无法读取。非常令人困惑,我从来没有弄清它的底细,但我发现DB在调用正确的查询时知道搜索路径是什么,这很好:)太好了!是的,我必须手动引用散列作为模式名,因为它们可以以数字开头,所以只需引用另一面就可以了。架构将始终是一个十六进制代码,并始终被引用。