问题标签 [libpq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 从 Cygwin 在 C 中运行 PostgreSQL 客户端
我正在尝试在 Cygwin 上用 C 构建一个非常简单的 PostgreSQL 客户端。
这是我到目前为止所做的:
- 我已经下载了 PostgreSQL 源代码版本 9.1.2(与我的服务器上运行的相同版本匹配)
- 我已经从 Cygwin 配置并编译了源代码。编译似乎很顺利。
- 据我所知,头文件位于:
- /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq,和
- /cygdrive/c/workspace/src/postgresql-9.1.2/src/include
- 图书馆位于:
- /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq
从这里开始,我使用下面的 makefile 编译并链接了客户端程序:
编译和链接成功,没有错误或警告。
但是,当我尝试运行该程序时,出现以下错误:
我还没有想出如何解决这个问题。任何指针将不胜感激。哦,还有一件事,我找到了 cygpq.dll 所在的文件夹并将我的 LD_LIBRARY_PATH 设置为指向它,但它仍然给了我相同的结果。
c++ - libpq - 编写测试
我正在为 libpq 编写一个 C++ 包装器。但是我不知道应该如何编写单元测试。我最初的反应是将 libpq 接口包装成可模拟的东西,但这违背了目的。有没有人这样做过?如果是这样,怎么做?
c - libpq - PQsendQuery 等待完整的结果
我遇到了 libpq 的PQexec
函数挂在间歇性连接上的问题。查看邮件列表后,解决方案是使用异步函数PQsendQuery
/PQgetResult
并实现自己的超时。
现在我面临的问题是PQgetResult
需要多次调用,直到它返回null
,然后你就知道它已经完成了。PQresult
但是,我的应用程序的其余部分需要每个查询一个对象。
所以我的问题是:
- 有没有办法连接/加入多个
PQresult
s? - 我可以在调用之前以某种方式使用
PQisBusy
&PQconsumeInput
等到所有结果都准备好了吗PQgetResult
?
c - libpq - PQconnectdb 失败时的 PQreset
如果我尝试通过建立连接PQconnectdb
但它失败了,是否可以调用PQreset
重PGconn*
试或者仅在我已经连接过一次时才有效?
c++ - libpq 错误消息释放
一个愚蠢的问题来了。libpq
的PQerrorMessage
函数返回一个char const*
现在既然它是const
,我认为我不应该释放它,而且我从未在任何示例中看到这样做过。但是,它何时以及如何被释放?它怎么知道我什么时候用完了我的msg
指针?
起初我认为一旦请求另一个错误消息,它就会被释放,但事实并非如此。
有人可以为我解释一下吗?
编辑:感谢 Dmitriy Igrishin
我在 postgresql 邮件列表上问了这个问题,结果证明我最初的假设是正确的。指针不应该是有效
的,不知何故我很幸运。msg1
编辑:来自 postgresql 文档
PQerrorMessage
返回由对连接的操作最近生成的错误消息。
几乎所有的 libpq 函数都会在
PQerrorMessage
失败时设置消息。请注意,按照 libpq 约定,非空PQerrorMessage
结果可以由多行组成,并且将包括一个尾随换行符。调用者不应直接释放结果。PGconn
当关联的句柄传递给时,它将被释放PQfinish
。不应期望结果字符串在PGconn
结构上的操作中保持相同。
postgresql - 二进制查询比文本查询慢+使用 Postgresql 转换?
找了高低找这个,一直没有找到明确的答案。我刚刚开始构建应用程序,我们决定将 Postgresql 用于我们的数据库,将 C 用于服务器。然而,一些初步测试显示了一些令人困惑的数字。似乎通过文本字符串访问数据库是最快的方法,这对我来说似乎违反直觉。当然,数据库在内部将整数和浮点数存储为二进制,并且必须将它们转换为文本,然后我必须将其转换回二进制才能使用。似乎更快的方法是将所有内容都保留为二进制文件,但到目前为止,我似乎无法获得二进制访问权限来显示这种好处。
这是我构建的一个简单测试用例,用于显示我所看到的(模式 + 代码)
我看到这样的时间安排:
开始迭代 0... 迭代 0:在 35 秒内通过 PQparamExec 获取 50000 条二进制记录 迭代 0:在 34 秒内通过 PQexecf 获取 50000 条二进制记录 迭代 0:在 25 秒内通过 PQexec 获取 50000 条文本记录
额外的迭代只是或多或少地重复该模式。我也尝试直接使用 libpq 得到类似的结果,但没有将它们移植到这个测试用例中。
这符合您的经验,还是我只是在某个地方愚蠢?
谢谢!
c++ - 在 VC 2010 上使用 SSL 的 libpq
我对在支持 SSL 的 Windows(VS2010 32 和 64 位)上编译 libpq 有疑问。我下载了最新的 postgres源以及OpenSSL Win64 v1.0.1c。我在 libpq 文件夹中运行 nmmake:
cd postgresql-9.2.2\interfaces\libpq
nmake /f win32.mak CPU=AMD64 USE_SSL=1 SSL_INC=C:\OpenSSL-Win64\include SSL_LIB_PATH=C:\OpenSSL-Win64\lib
然后编译结束,他找不到bufferoverflowU.lib。搜索了一下我发现,这个库是与 windows SDK 一起部署的,并且由于 VS 2005 不再需要(参见Vista / Win 7 SDK bufferoverflowu.lib 链接错误)。所以在 libpq 的 make 文件 (win32.mak:20) 中我注释掉了这一行
ADD_SECLIB=bufferoverflowU.lib
它编译得很好。我也没有遇到任何麻烦,用 ssl 测试这个 libpq。
我是否需要良心不好从构建中删除 bufferoverflowU.lib 还是仅仅因为 makefile 不适用于 VS 2010?(顺便说一句:openssl 已将 VC 文件夹中的库名称分别更改为 *MD.lib *MT.lib。旧命名的库位于 C:\OpenSSL-Win64\lib 中,一个目录)
有人能告诉我在 VS2010 构建中是否需要 bufferoverflowU.lib 吗?
干杯,550
cmake - FindPostgreSQL.cmake 无法在 ubuntu 上运行
- Ubuntu 12.04
- CMake 2.8.9
- PostgreSQL 9.2.2
我正在尝试让FindPostgreSQL
模块找到/usr/include/postgresql/libpq-fe.h
.
这是我的CMakeLists.txt
:
这是我得到的错误:
我在调用之前添加了以下几行,find_package
但它似乎没有任何效果。
我也尝试用谷歌搜索,PostgreSQL_TYPE_INCLUDE_DIR
但没有找到任何东西。我还能尝试什么?
c - Getting size of field in libpq-fe
I am using the libpq-fe
library in C
to contact to a postgres database.
I am calling a stored procedure from my code using libpqfe
which returns a timestamp.
I want to store this timestamp to a char array. But to do so I first have to know the size of timestamp so that I can declare the array. To get the size I am using int PQfsize(PGresult *res, int field_index);
. You can found more about it here.
It returns the value 8
. But actually the size of the timestamp(without zone) is 19
.
Why PQfsize is returning wrong value?
I know that size of the timestamp is constant and I can directly declare an array and then retrieve the value using PQgetvalue
, but how to declare arrays for the fields which don't have fixed size.
How to retrieve a field from PGresult
to store it into any variable?
ruby - Ruby 脚本挂在错误的 PG 连接调用上
我有一个 Ruby 脚本,它连接到 postgres 数据库,运行一些查询,然后关闭/返回数据给用户。
该脚本工作正常,但如果我给它一个错误的主机名,整个脚本就会挂起,我必须按 ctrl-Z 退出。我知道要解决这个问题,我需要查看libpq
postgres 的后端,但我不知道如何将它全部包装到我的 ruby 脚本中。我正在使用Ruby 1.8
和pg gem
处理 postgres 的东西,调用打开连接:
(options 和 tty 只是空白字符串)
任何帮助/提示/建议都会很棒!