簡體   English   中英

在postgres中實現用戶定義的c函數

[英]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_xmlcursor_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM