我正在爲postgresql 9.3.5編寫一個c-language用戶自定義函數。我沒有使用pl/pgsql或pl/python,因爲它的一部分需要用C語言編寫以提高速度。如何訪問Postgresql c語言函數中的大對象?
該函數獲取現有的OID作爲參數。如何訪問&修改c語言函數中的OID數據?我找不到任何文檔!
我有什麼到目前爲止裏面的功能僅僅是一部分,讀取參數:
#include "postgres.h"
#include "fmgr.h"
PG_MODULE_MAGIC;
Datum tsdb_write_lob(PG_FUNCTION_ARGS) ;
PG_FUNCTION_INFO_V1(tsdb_write_lob);
Datum tsdb_write_lob(PG_FUNCTION_ARGS) {
int16 arg_dataformat = PG_GETARG_INT16(0);
int16 arg_granularity_days = PG_GETARG_INT16(1);
Oid arg_dataoid = PG_GETARG_OID(2);
ereport(INFO, (errcode(ERRCODE_SUCCESSFUL_COMPLETION),
errmsg("Arguments were: %d, %d, %ld\n",arg_dataformat,arg_granularity_days,arg_dataoid)));
/*TODO:
* open oid (lo_open ?)
* read data
* decompress data
* parse data
* add new data
* compress data
* save to same oid
*/
PG_RETURN_VOID();
}
UPDATE: 這似乎是一個例子:
https://github.com/postgres/postgres/blob/master/src/backend/libpq/be-fsstubs.c
你能證明你有什麼這麼遠嗎?我真的覺得這非常有趣,最近在c中對PostgreSQL做了一些擴展,所以我可以幫你。 – 2015-01-26 19:07:17
奇怪的是,在開發postgresql函數時,很少有文檔存在。這是運氣和谷歌技能的結合。 – sivann 2015-01-26 19:20:21
是的,在postgresql的文檔中幾乎沒有好的例子。我打算問你,open open oid是什麼意思? – 2015-01-26 19:23:16