我已经写了一些PostgreSQL C-Extensions(第一次),它们按预期工作。
但是现在我想从C扩展内部调用其他PostgreSQL函数,例如regexp_match()
或从其他扩展(例如PostGIS'ST_POINT
)中调用。
我认为fmgr
是关键,但是我没有找到任何示例。
答案 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")
);