我刚刚开始用Postgres外部C函数进行测试。当我传入一个数字并返回它时,该函数可以正常工作。 (例)Postgres C函数 - 传递和返回数字
示例函数
PG_FUNCTION_INFO_V1(numericTesting);
Datum
numericTesting(PG_FUNCTION_ARGS)
{
Numeric p = PG_GETARG_NUMERIC(0);
PG_RETURN_NUMERIC(p);
}
然而,当我尝试做传递的变量的任何数学函数,它不会编译。我得到
error: invalid operands to binary *
示例函数
PG_FUNCTION_INFO_V1(numericTesting);
Datum
numericTesting(PG_FUNCTION_ARGS)
{
Numeric p = PG_GETARG_NUMERIC(0);
PG_RETURN_NUMERIC(p * .5);
}
是什么原因造成的?我猜数字数据类型需要一些函数来允许数学。我试过使用:PG_RETURN_NUMERIC(DatumGetNumeric(p * .5))但结果相同。
该版本可行,但需要使用两个数字。需要弄清楚如何从一个Integer或Float8实例化一个Numeric我想。 PG_FUNCTION_INFO_V1(numericTesting); Datum numericTesting(PG_FUNCTION_ARGS) { Numeric p = PG_GETARG_NUMERIC(0);数字答案= DatumGetNumeric(DirectFunctionCall2(numeric_mul,NumericGetDatum(p_latitude),NumericGetDatum(p_latitude))); PG_RETURN_NUMERIC(answer); } – user739866