没有libpq++和SQLAPI++的C++和Postgresql
C++ and Postgresql without libpq++ and SQLAPI++
我如何在不使用libpq++或SQLAPI++的情况下在C++和Postgresql之间创建接口,因为我试图安装这两个库,但我无法安装(没有windows教程)。我知道Postgis和Ppricing使用C++。。也许他们使用另一个库来与Postgresql接口。。。
谢谢:D
有用的文档:
- https://www.postgresql.org/docs/current/static/spi.html
- https://www.postgresql.org/docs/current/static/xfunc-c.html
- 使用:35.9.4。版本1调用约定
对于要用c++编码并将返回集合的函数foo,我有以下文件:
- foo.c
- foo_driver.h
- foo_driver.cpp
foo.c
遵循"35.9.9。Returning Sets(一个简单SRF返回复合类型的完整示例)"除了我们在调用实际的c++函数之前调用一个静态函数来做一些事情(主要是读取更多数据)
static process ( char* a, bool b, bool c, mystruct* result_tuples, int result_count) {
<maybe some checking or conversions here of a, b, & c>
call_cpp_function( a1, b1, c1, result_tuples, result_count )
}
PG_FUNCTION_INFO_V1(foo);
Datum
foo(PG_FUNCTION_ARGS) {
...
process(
pgr_text2char(PG_GETARG_TEXT_P(0)),
PG_GETARG_BOOL(1),
PG_GETARG_BOOL(2),
&result_tuples,
&result_count);
...
} // end of first call
...
if (call_cntr < max_calls) {
...
else {
free(result_tuples);
SRF_RETURN_DONE(funcctx);
}
};
foo_driver具有将在C代码和C++代码上使用的C++函数的定义
#ifdef __cplusplus
extern "C" {
#endif
void call_cpp_function( <parameters > );
#ifdef __cplusplus
}
#endif
foo_driver.cpp
具有函数"call_cpp_function"的实际cpp代码非postgres文件将包含在这里,当然您可以在这里包含更多的c++文件。特殊规则:
- 不要忘记try/catch,否则可能会使服务器崩溃
- 尽快将C数组转换为C++容器
- 不要在C++代码上使用指针,除非
- 创建生成的C数组时(记住我的示例返回一个集合)
- 不要忘记最后一次通话结束后的"免费"语句
例如
#include < vector >
#include < deque >
#include "myclass.h"
void call_cpp_function( <parameters > ) {
try {
<process>
// use malloc to prepare the C array
} catch( .. ) {
// do cleanup
}
}
注意:这个答案中没有涉及的内容:编译、链接、作为扩展添加。
相关文章:
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- PostgreSQL C++ libpq 编码 UTF-8 问题
- PostgreSQL 将数组或记录作为行返回
- 在 PostgreSQL C 扩展中包含头文件
- 使用二进制数据更新 PostgreSQL 表
- 在PostgreSQL函数或过程中使用C++代码
- 使用准备好的语句大容量插入到postgresql
- 使用 redis 进行日志缓存:是否可以创建逐出到 PostgreSQL 的逐出策略?
- 为什么当我使用 soci 连接到 postgresql 时,我没有足够的数据库权限?
- PostgreSQL:如何为我的单元测试创建临时用户和数据库
- QSqlQuery 不从 postgresql 中选择记录
- Poco c++ 如何从PostgreSQL DB读取"text"数据类型?
- 任何用于PostgreSQL的OLE DB提供商/消费者
- PostgreSQL & CMakeLists - Undefined symbol [...] _my_sock_read in libpq.a(fe-secure-openssl.o)
- 如何与LIBPQXX API同时插入数据?(PostgreSQL,线程)
- 使用libpq组织PostgreSQL数据库连接参数
- 有没有办法将 vector<unsigned char> 插入 postgresql 表中,具有 bytea 属性,没有 UTF8 编码错误?