在apache 时代,当我调用DirectFunctionCall()函数时.它不会被处决.我曾try 将使用elog()函数的日志(log)语句放入write()函数中.但是,这是没有用的.代码示例如下所示-

PG_FUNCTION_INFO_V1(some_function);

PG_FUNCTION_INFO_V1(write);

Datum
some_function(PG_FUNCTION_ARGS) {
    .
    .
    .
    DirectFunctionCall4(write, dest_lob, 2 * size, dest_offset, cstring_to_text(buffer));
}

这里提到的write函数在下面的同一文件中定义.我已经判断了参数以及返回类型.所有内容都正确匹配,但语句仍未执行.

推荐答案

根据您的代码片段,更改函数信息定义的顺序应该是可行的.依赖函数应该在基本函数之后定义.

PG_FUNCTION_INFO_V1(write);
PG_FUNCTION_INFO_V1(some_function);

100有一种更好的方法来实现相同的功能.通常,如果要为多个函数调用同一段代码,建议将其设置为单独的模块(在本例中为单独的函数)

在c代码的postgres扩展中处理这种情况的最好方法是不在同一文件中使用直接函数调用.

相反,创建静态助手函数(write_helper),并使PG函数write成为调用该函数的包装函数.

PG_FUNCTION_INFO_V1(write);
PG_FUNCTION_INFO_V1(some_function);

static <return_type> write_helper(<parameters>);

// wrapper function for the write_helper function
Datum
write(PG_FUNCTION_ARGS){
   <return_value type> result;
   result = write_helper(<parameters>);
   .
   .
   .

}

Datum
some_function(PG_FUNCTION_ARGS) {
    .
    .
    .
    write_helper(<parameters>);
    .
    .
    .
}

// define the static function
static 
<return_type> write_helper(<parameters>){
     returns <return value>
}

C++相关问答推荐

自定义malloc实现上奇怪的操作系统依赖行为

理解没有返回语句的递归C函数的行为

C指针地址和转换

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

为什么双重打印与C中的float具有不同的大小时具有相同的值?

Sizeof(&Q;字符串&Q;)的正确输出是什么?

如何按顺序将所有CSV文件数据读入 struct 数组?

如果格式字符串的内存与printf的一个参数共享,会发生什么情况?

C++中PUTS函数的返回值

如何在C中处理流水线中的a、n命令?

atoi函数最大长-长误差的再创造

我错误地修复了一个错误,想了解原因

System V 消息队列由于某种原因定期重置

如何用用户输入的多个字符串填充数组?

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?

为什么创建局部变量的指针需要过程在堆栈上分配空间?

clion.我无法理解 Clion 中发生的 scanf 错误

在 C 中的 scanf() 格式说明符中使用宏获取字符串长度

C语言程序流程解释

初始化动态分配的布尔二维数组的最佳方法是什么?