2013-07-21 54 views
-1

我想使用postgres自身從postgres search_path中提取第一個模式。實際功能需要更大的SELECT內工作的WHERE子句中的條件:從Postgresql中不帶引號的search_path中提取第一個模式

SELECT * from something WHERE domain_hash = THEFUNCTION AND etc... 

的SEARCH_PATH永遠是這樣的:

"068503358dddd23c",spikeadmin 

我想該函數返回無068503358dddd23c報價。

我想正則表達式可能是爲了?

+0

你是指'函數調用中的'THEFUNCTION()'嗎?此外,你正在尋找的價值也是用戶名?第二部分可能看起來像一個奇怪的問題,但似乎這個模式名稱可能與當前登錄的用戶有關,因爲你暗示它是可變的。 – jpmc26

+0

模式是可變的,但來自與在Rails應用程序中訪問的主機名相關的另一個數據庫字段。通過函數我很鬆散,我希望它可以通過類似接受的答案來解決:) –

+0

感謝您的解釋:)不幸的是,這是一個Rails模型中has_one的條件,由於某種原因,當我嘗試要傳遞我從Rails本身獲得的域哈希(通過它的schema_search_path方法),它試圖在奇怪的時候調用它,因爲它沒有準確的信息它。相當混淆,我從來沒有達到底部,但認爲數據庫知道什麼時候正確的查詢被稱爲搜索路徑,這是成功的:) –

回答

0

問題是,PostgreSQL有一個quote_ident函數,但沒有適當的unquote函數。而"068503358dddd23c"quote_ident的輸出。

所以,你可以做別的事情:

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

如果模式中有,這是行不通的。但對於十六進制碼,這應該不是問題。

+0

太棒了!是的,我必須手動引用散列作爲模式名稱,因爲它們可以以數字開頭,所以只需引用另一方就行。該模式將始終是一個十六進制代碼並始終被引用。 –

相關問題