|
|
PostgreSQL
提供一个发往后端的函数调用的捷径接口.
这是一个通向系统内部的后门,因而可能存在安全漏洞.
大多数用户应该不需要这个特性.
-
PQfn
请求允许通过捷径接口执行后端函数.
PGresult* PQfn(PGconn* conn,
int fnid,
int *result_buf,
int *result_len,
int result_is_int,
const PQArgBlock *args,
int nargs);
fnid
参数是待执行的函数的对象标识(OID).
result_buf
是放置返回值的缓冲区.
调用者必须为返回值分配足够的空间(这里没有检查!).
实际的返回值长度将被放在
result_len
指向的整数里返回.
如果预期返回值是 4-字节整数,把
result_is_int
设为 1;
否则设为 0.(把
result_is_int
设为 1 告诉
libpq
必要时交换数值字节序,
这样就可以正确地传输成客户机上的整数值.当
result_is_int
是 0 时,
后端发送回来的字节串不做修改.)
args
和
nargs
声明要传入函数的参数.
typedef struct {
int len;
int isint;
union {
int *ptr;
int integer;
} u;
} PQArgBlock;
PQfn
总是返回一个有效的
PGresult*
.
在使用结果之前应该检查 resultStatus.
当结果不再使用后,调用者有义务使用
PQclear
释放
PGresult
.
|