作为Postgres中另一个函数的参数

Kun*_*ngi 5 c sql database postgresql plpgsql

我可以通过C语言函数API或使用pl/pgsql接受回调函数作为参数在Postgres中创建用户定义的函数吗?

据我所知,没有办法通过C语言API执行此操作,因为它只接受sql数据类型,并且没有数据类型function.但也许我错过了什么?

A.H*_*.H. 9

由于每个函数/过程必须在 pg_proc 中有一个条目,因此您可以使用主键来标识过程。这也将消除具有相同名称但参数数量不同或参数类型不同的过程的问题。

其简写是类型regprocregprocedure相关的强制转换,以便于处理。查找这些的手册

识别函数并传递它是没有问题的:

select 'pg_database_size(oid)'::regprocedure; -- create "reference"
     regprocedure      
-----------------------
 pg_database_size(oid)
Run Code Online (Sandbox Code Playgroud)

用作regprocedure参数类型。

我还没有弄清楚的问题是如何以方便的方式实际调用这样的东西。

  • 您必须构建动态 SQL 并在 plpgsql 函数中使用 EXECUTE。将“regproc”转换回“text”以构建查询字符串。请务必使用“quote_ident()”防范 SQLi - 函数名称不安全。考虑:`CREATE FUNCTION ";delete from users;"() RETURNS int AS 'SELECT 1' LANGUAGE sql;` (4认同)

Mic*_*ker 2

我认为你不能,但由于没有匿名函数,因此传递函数名称应该可以。