如何為PostgreSQL建立自訂內建函數

來源:互聯網
上載者:User

標籤:

  1. 函數 version(),沒有參數,作為例子簡潔明了。如果需要參數,可以查閱 adt 下其他函數定義,也是非常簡單的事情,這就是開源給我們帶來的知識寶庫;

    1. postgres=# select version();                                                     version                                                     ----------------------------------------------------------------------------------------------------------------- PostgreSQL 9.5devel on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6), 64-bit(1 row)postgres=#
    2. 定義在 src/backend/utils/adt/version.c 裡邊:

      1. Datumpgsql_version(PG_FUNCTION_ARGS){PG_RETURN_TEXT_P(cstring_to_text(PG_VERSION_STR));}
    3. 其他檔案內的定義,/src/include/utils/builtins:

      1. /* version.c */extern Datum pgsql_version(PG_FUNCTION_ARGS);
    4. 最關鍵的定義,讓使用者可以看到,/src/include/catalog/proc.h,這個檔案編譯前會被指令碼處理產生 BKI(自行查閱文檔)指令碼,初始化資料庫時在 pg_proc 裡邊定義函數,類型為internal,這個類型是有別於其他類型的(比如C,定義在外部庫中),關於這些定義的含義,篇幅有限請自行學習吧:

      1. DATA(insert OID =  89 (  version   PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 25 "" _null_ _null_ _null_ _null_ pgsql_version _null_ _null_ _null_ ));
  2. 定義我們自己的函數:

    1. Datumquanzl_version(PG_FUNCTION_ARGS){PG_RETURN_TEXT_P(cstring_to_text(“Quan‘s Database”));}
    2. builtins.h 在 pgsql_version下添加定義:

      1. extern Datum quanzl_version(PG_FUNCTION_ARGS);
    3. proc.h:

      1. DATA(insert OID =  90 (  quan_version   PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 25 "" _null_ _null_ _null_ _null_ quanzl_version _null_ _null_ _null_ ));
      2. 這裡的 OID = 90 至關重要,並不是隨意選取,必須是未使用的,怎麼找呢,PG為我們提供了指令碼,在 src/include/catalog/下的 unused_oids,輕鬆知道哪個可用。(還有一個duplicate_oids用於排錯)

  3. 編譯、運行,就這麼簡單

  4. 時間關係,上述過程未經驗證,可能有錯誤,但大致步驟如此。








如何為PostgreSQL建立自訂內建函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.