簡體   English   中英

如何在Postgres的C語言函數中返回bit(n)或bit different(n)字段?

[英]How do you return a bit(n) or bit varying(n) field in a C-language function for Postgres?

問題說明了一切; 如何為Postgres提供C語言功能,返回一個位串?

擴展Nick的評論(非常有幫助!),這是一個簡單的示例,其返回結果在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 shell中運行:

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”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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