0
問題說明了一切;我如何獲得Postgres的C語言函數返回一個位串?如何在PostgreSQL的C語言函數中返回一個位(n)或位變量(n)?
問題說明了一切;我如何獲得Postgres的C語言函數返回一個位串?如何在PostgreSQL的C語言函數中返回一個位(n)或位變量(n)?
擴展尼克(!非常有幫助)的評論,這裏是一個簡單的例子,在Postgres裏(Postgres.app 9.4,運行OS X Yosemite)的返回結果:
#include <postgres.h>
#include <utils/array.h>
#include <utils/varbit.h>
#include <fmgr.h>
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
Datum pg_test_varbit(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(pg_test_varbit);
Datum
pg_test_varbit(PG_FUNCTION_ARGS)
{
VarBit *result;
int len, rlen;
len = 16;
rlen = VARBITTOTALLEN(len);
result = palloc0(rlen);
SET_VARSIZE(result, rlen);
VARBITLEN(result)
= len;
VARBITS(result)[0] = 0xFF;
VARBITS(result)[1] = 0x0;
PG_RETURN_VARBIT_P(result);
}
一旦編譯/安裝,我在跑一個Postgres外殼:
DROP FUNCTION IF EXISTS pg_test_varbit();
CREATE OR REPLACE FUNCTION pg_test_varbit() RETURNS varbit
AS 'pgtestvarbit', 'pg_test_varbit'
LANGUAGE C STRICT;
SELECT pg_test_varbit();
並且收到「1111111100000000」作爲結果。
這些類型的支持函數是[here](https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/varbit.c),並且應該包含大量示例 –