Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C++;PostgreSQL函数或过程中的代码_C++_Postgresql - Fatal编程技术网

C++ 使用C++;PostgreSQL函数或过程中的代码

C++ 使用C++;PostgreSQL函数或过程中的代码,c++,postgresql,C++,Postgresql,我在同一台PC上有一个编译过的库,它与我在编写一些C++代码时使用的PostgreSQL。我必须使用这个库处理PostgresSQL数据库中的一些表值。遗憾的是,在同一台PC上使用Postgres运行单独的客户端与数据库通信不是一个选项 是否可以在PostgreSQL函数或过程中包含并使用#include提供的函数? 我读了一些关于使用: external "C" { #include <seal/seal.h> // do something with the seal func

我在同一台PC上有一个编译过的库,它与我在编写一些C++代码时使用的PostgreSQL。我必须使用这个库处理PostgresSQL数据库中的一些表值。遗憾的是,在同一台PC上使用Postgres运行单独的客户端与数据库通信不是一个选项

是否可以在PostgreSQL函数或过程中包含并使用
#include
提供的函数? 我读了一些关于使用:

external "C" {

#include <seal/seal.h>
// do something with the seal functions here

}
外部“C”{
#包括
//在这里对seal函数做些什么
}

但是没有太多的例子,我不明白。PostgreSQL文档中关于C++的部分也没有说得更清楚。

正如文档所建议的,从PostgreSQL调用的函数必须声明为
extern C
,以便C代码可以与之链接

在您必须从C++库调用函数的地方,使用异常处理程序,使用<代码> catch(…)<代码>捕获所有可能的异常,并通过调用<代码> ErErPoT()/<代码>(在代码> catch -< /Cord>子句外,从而在调用堆栈上没有任何C++)将其转换为PostgreSQL错误消息。

如果必须调用PostgreSQL C函数,请确保调用堆栈中不包含以下值:

C++中的PDS类型,或者普通的C++对象,定义为标量类型或PDS类。PDS类没有用户定义的复制赋值运算符,没有用户定义的析构函数,也没有本身不是PDS的非静态数据成员。此外,PDS类必须是聚合类,这意味着它没有用户声明的构造函数、没有私有或受保护的非静态数据、没有虚拟基类和虚拟函数


简而言之,除了调用库函数的地方外,请尽可能使用C编写代码。

要实现这一点,您需要在PostgreSQL发行版IIRC中添加一个已编译的模块。让我们看看我是否正确。我开始在PostgerSQL中为我的表声明一个函数或过程,然后在
extern“C”{here}
中编写我的C/C++。如果到目前为止是正确的,那么
extern“C”{}
外部的SQL变量可以被
extern“C”{}
内部的变量使用吗?我不明白。。。什么是“SQL变量”?用词不当。我指的是在
extern“C”{}
部分之外,但在PosgresSQL过程或函数内部的任何声明变量。是的,当然。据我所知,
extern C
只影响链接器为修饰函数命名符号的方式。感谢您的帮助。我将在这个周末完成它,希望它能按计划工作:)。