PostgreSQL,C-扩展,调用其他函数

时间:2019-10-11 08:04:13

标签: c postgresql

我已经写了一些PostgreSQL C-Extensions(第一次),它们按预期工作。

但是现在我想从C扩展内部调用其他PostgreSQL函数,例如regexp_match()或从其他扩展(例如PostGIS'ST_POINT)中调用。

我认为fmgr是关键,但是我没有找到任何示例。

1 个答案:

答案 0 :(得分:0)

通常的方法是获取函数的Oid并使用OidFunctionCall*宏之一来调用该函数。对于regexp_match,应该是

OidFunctionCall2(
   F_REGEXP_MATCH_NO_FLAGS,
   text_datum,
   CStringGetDatum("pattern")
);

对于未内置的功能,可以通过使用Oid搜索pg_proc系统目录来获得SearchSysCacheList*

对于内置SQL函数,您还可以使用DirectFunctionCall*来调用它们:

DirectFunctionCall2Coll(
   regexp_match_no_flags,
   DEFAULT_COLLATION_OID,
   text_datum,
   CStringGetDatum("pattern")
);
相关问题