2016-03-02 86 views
0

我在這裏看到了一個類似的帖子,但我的情況與我迄今發現的任何東西都略有不同。我想用參數調用postgres函數,我可以在函數邏輯中利用它們,因爲它們與jsonb查詢有關。這裏是我試圖用參數重新創建的查詢的一個例子。Postgres函數與jsonb參數

SELECT * 
    from edit_data 
    where ("json_field"#>'{Attributes}')::jsonb @> 
        '{"issue_description":"**my description**", 
         "reporter_email":"**[email protected]**"}'::jsonb 

我可以運行此查詢只是pgAdmin的很好,但我所有的努力迄今給函數內部設置有用於「我的描述」和「[email protected]」的價值觀已經失敗參數運行此。下面是我嘗試創建功能的一個簡單的例子:

CREATE OR REPLACE FUNCTION get_Features(
    p1 character varying, 
    p2 character varying) 
    RETURNS SETOF edit_metadata AS 
$BODY$ 
SELECT * from edit_metadata where ("geo_json"#>'{Attributes}')::jsonb @> '{"issue_description":**$p1**, "reporter_email":**$p2**}'::jsonb; 
$BODY$ 
    LANGUAGE sql VOLATILE 
    COST 100 
    ROWS 1000; 

我知道,語法是不正確的,我一直是這樣掙扎了兩天。任何人都可以幫助我理解如何最好地處理這些圍繞該值的雙引號,並在此使用一個參數?

TIA

+1

它是一個字符串,就像「{」issue_description「:」'|| yourParam ||'「'等等。 –

+0

我也曾嘗試沿着這些路線的東西: CREATE OR REPLACE FUNCTION get_customentitywithserializeddatatest7( P1字符改變, P2字符改變) RETURNS SETOF edit_metadata AS $ BODY $ SELECT * FROM edit_metadata其中( 「geo_json」 #>'{屬性}'):: jsonb @>'{「issue_description」:COALESCE($ 1,issue_description),「reporter_email」:COALESCE($ 2,reporter_email)}':: jsonb; $ BODY $ 語言sql VOLATILE COST 100 ROWS 1000; – DenverDevGuy

+1

你還是不明白,這個''{issue_description「:」**我的描述**「,」reporter_email「:」** [email protected] **「}」'是一個字符串,因此你不能在裏面使用funcion,命令或變量,並希望postgresql能理解,它不是PHP,你必須說它正在形成一個新的字符串。它應該是(爲你的情況):''{「issue_description」:「'|| p1 ||'」,「reporter_email」:「'|| p2 ||'」}''這樣你告訴postgresql你想「注入」你的參數在你的弦內 –

回答

1

你可以使用函數json_build_object

select json_build_object(
    'issue_description', '**my description**', 
    'reporter_email', '**[email protected]**'); 

,你會得到:

        json_build_object          
----------------------------------------------------------------------------------------- 
{"issue_description" : "**my description**", "reporter_email" : "**[email protected]**"} 
(1 row) 

這樣,沒有辦法,你會輸入無效的語法(使用引號字符串沒有麻煩)你可以用參數交換這些值。

+0

感謝您的回覆hruske,我正在研究這個問題,但仍然不清楚如何使用我目前的方案來實現它,因爲我對Postgres和jsonb特別新。 – DenverDevGuy

+0

json_build_object轉了鑰匙,非常感謝你! – DenverDevGuy