c - 如何在 Postgres 的 C 语言函数中返回位(n)或位变化(n)字段?

标签 c arrays postgresql bitstring

问题说明了一切;如何让 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”结果。

关于c - 如何在 Postgres 的 C 语言函数中返回位(n)或位变化(n)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543439/

相关文章:

c - 为什么不能使用 memcmp() 函数进行浮点类型比较?

c - 使用数组创建单链表时的警告

Ruby 动态数组 : undefined local variable or method `s' for main:Object (NameError)

改变 char* 指向几位偏移量

database - 基于Postgresql继承的数据库设计

c - 使用 malloc 为其分配内存后如何加载结构?

c - 更新使用 "-Bsymbolic"链接器选项生成的 ELF 共享对象

javascript - ES6 数组方法用于删除/检测数组中的重复对象

postgresql - 尝试使用包含等号的路径从 S3 加载到 Postgres RDS 时权限被拒绝

regex - postgresql 中 regexp\Q...\E 的等价物是什么?