![](/img/trans.png)
[英]How to convert Postgres plpgsql user-defined function to LANGUAGE SQL user-defined function?
[英]implementing user-defined c function in postgres
我試圖在PostgreSQL中的C中創建自定義函數。
在訪問傳入的表中的數據后,該函數應將一個表作為參數,並返回一個表作為輸出。
我所看到的示例都涉及傳遞整數和其他基本類型。 我的請求可以在PostgreSQL中進行嗎? 我將如何去做呢?
是的,有可能。
輸出端很簡單,您只需要使用RETURNS TABLE (...)
或RETURNS SETOF record
,具體取決於結果集是否包含動態列。 源代碼中有很多示例,文檔中有很多示例。
輸入端不太簡單。 您需要將refcursor傳遞給函數,傳遞表模式和名稱,或傳遞regclass
oid,即pg_class
中表的ID。 選擇哪種取決於您需要如何使用該功能。 如果希望它能夠使用另一個函數的輸出,則僅可使用refcursor。 如果您不需要(或不介意通過臨時表執行此操作),則使用regclass
oid更為方便,因為您不必為表創建游標並將游標傳遞給函數,您只需直接傳遞表名或oid。
PostgreSQL中的一些函數將表作為regclass
讀取並處理它們。 源代碼中的table_to_xml
函數是執行此操作的一個很好的起點。
您不太可能找到很多有關如何獲取反射器並對其進行處理的示例。 最好的起點是PostgreSQL源代碼。 cursor_to_xml
和cursor_to_xmlschema
函數使用refcursor。
這些功能都在src/backend/utils/adt/xml.c
。 您可以在那里看到table_to_xml
版本只是select * from the_table
中進行select * from the_table
,並將光標傳遞到query_to_xml_internal
進行處理。 那顯示了如何讀取和使用行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.