我在這裏看到了一個類似的帖子,但我的情況與我迄今發現的任何東西都略有不同。我想用參數調用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
它是一個字符串,就像「{」issue_description「:」'|| yourParam ||'「'等等。 –
我也曾嘗試沿着這些路線的東西: 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
你還是不明白,這個''{issue_description「:」**我的描述**「,」reporter_email「:」** [email protected] **「}」'是一個字符串,因此你不能在裏面使用funcion,命令或變量,並希望postgresql能理解,它不是PHP,你必須說它正在形成一個新的字符串。它應該是(爲你的情況):''{「issue_description」:「'|| p1 ||'」,「reporter_email」:「'|| p2 ||'」}''這樣你告訴postgresql你想「注入」你的參數在你的弦內 –