我正在使用PostgreSQL 8.3,并在使用libpqAPI的C++中编写程序.我与PQsendQuery()函数异步执行命令.我正在尝试实现超时处理功能.我PQcancel()在超时到期时通过调用实现它.我使用一个返回100 000行(持续约0.5秒)并且超时为1毫秒的查询进行测试,发现不是取消命令,而是PQcancel()阻塞直到服务器完成执行,然后返回成功的查询.
据我所知,文档说即使成功取消请求,查询仍可能被执行.我的问题是PQcancel()阻塞我的执行线程,这是不可接受的,因为我使用异步处理(使用Boost Asio框架)所以我的程序,除了执行SQL查询之外可能还有其他任务,只在一个线程上运行.
PQcancel()阻止是正常的吗?有没有办法进行非阻塞取消请求?
我正在开发一个简单的Go服务来连接到数据库以进行基本查询。我用来sqlc生成Go与数据库交互的函数。lib/pq当从现在切换驱动程序时,pgx/v5数据库字段的类型而pgtypes不是Go类型。这是一个例子:
而不是这个:
type ListAccountsParams struct {
Owner string `json:"owner"`
Limit int32 `json:"limit"`
Offset int32 `json:"offset"`
}
Run Code Online (Sandbox Code Playgroud)
我现在明白了:
type ListAccountsParams struct {
Owner pgtype.Text `json:"owner"`
Limit pgtype.Int4 `json:"limit"`
Offset pgtype.Int4 `json:"offset"`
}
Run Code Online (Sandbox Code Playgroud)
然而我发现使用的唯一方法pgtypes是这个:
owner := pgtype.Text{
String: "Craigs List",
Valid: true,
}
Run Code Online (Sandbox Code Playgroud)
而不是仅仅做owner := "Craigs List"。对于数字类型就更矫枉过正了,我找到的所有实现都是这样的:
pgtype.Numeric{
Int: big.NewInt(-543),
Exp: 3,
Status: pgtype.Present
}
Run Code Online (Sandbox Code Playgroud)
使用sqlc配置文件,我可以覆盖这些类型以支持标准类型,但对我来说必须覆盖 postgres类型等等Go是没有意义的......textstring
在我看来,这不是使用这些类型的最佳方式,这对我来说是违反直觉的。所以我的问题是,我做得对吗?有不同的方法吗?最终,有没有一种方法可以配置 …
你能给出一个使用libpq从远程机器在PostgreSQL数据库中插入二进制数据的例子.我的第二个问题是:是否有任何其他API比使用C++的libpq更有效.谢谢
我正在尝试通过 Cygwin 用 C 语言构建一个非常简单的 PostgreSQL 客户端。
这是我到目前为止所做的:
从这里开始,我使用下面的 makefile 编译并链接了客户端程序:
testlibpq: testlibpq.c
gcc -o testlibpq -I /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq -I /cygdrive/c/workspace/src/postgresql-9.1.2/src/include -L /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq testlibpq.c -Bstatic -lpq
Run Code Online (Sandbox Code Playgroud)
编译和链接成功,没有错误或警告。
但是,当我尝试运行该程序时,出现以下错误:
$ ./testlibpq
/cygdrive/c/Users/dleclair/Dropbox/denis/src/testlibpq/testlibpq.exe: error while loading shared libraries: cygpq.dll: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我还没有想出如何解决这个问题。任何指针将不胜感激。哦,还有一件事,我找到了 cygpq.dll 所在的文件夹,并将我的 LD_LIBRARY_PATH 设置为指向它,但它仍然给了我相同的结果。
dleclair@dleclair-win7l ~/Dropbox/denis/src/testlibpq
$ ls /cygdrive/c/workspace/src/postgresql-9.1.2/src/interfaces/libpq
bcc32.mak encnames.o fe-connect.o fe-misc.o fe-protocol3.o ip.o libpq-events.c md5.c pgstrcasecmp.c pqsignal.c thread.o
blibpqdll.def …Run Code Online (Sandbox Code Playgroud) Heyo.如果在另一个帖子中回答了这个问题,我会提前道歉.我搜索了网站,但没有找到答案.但是,最接近的相关问题是启动server-libq.5.dylib时Ruby on Rails/PostgreSQL - Library not Loaded错误,但它从未得到解决,答案对我没有帮助.
我正在尝试在我的Mac OSX 10.6.8上运行PostgreSQL.我已经安装了Ruby 1.9.3p392和Rails 3.2.13.
由于我的10.6.8和PostGresApp需要10.7+,我尝试使用此处提供的手动安装程序(v9.2.3)安装PG:http://www.enterprisedb.com/products-services-training/pgdownload
我首先将它安装到默认路径:/Library/PostgreSQL/9.2/.然后我安装了pg gem(PATH=$PATH:/Library/PostgreSQL/9.2/bin sudo gem install pg).当我尝试rails s启动localhost时,我收到了以下错误.
经过一些阅读,我猜测它可能是一个路径错误,所以我删除了pg gem,然后使用了postgresql卸载程序.然后我重新安装了/users/stewartmccoy/Library/PostgreSQL/9.2/...中的pg,然后重新安装了pg gem.但我仍然得到同样的错误.
有关如何正确安装PostgreSQL并让我的rails服务器运行的任何想法?
stewart-mccoys-macbook:footy_subs stewartmccoy$ rails s
/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `require': dlopen(/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError)
Referenced from: /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
Reason: image not found - /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>'
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require'
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each'
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require'
from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each'
from …Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以使用 libpq 而不是使用字符串直接从 C/C++ 进行参数化查询,以及这段代码应该是什么样子的?
string tblins = "";
tblins = "INSERT INTO " + commtable + " "
"(vdoc, bdoc, mytime, txml) VALUES ("
"'" + cxml.vdoc + "', "
+ cxml.bdoc + ", " //integer
"'" + cxml.mytime + "', "
"'" + cxml.txml + "')";
result = PQexec(conn, tblins.c_str());
Run Code Online (Sandbox Code Playgroud)
谢谢。
我将使用 C 库来连接和使用 PostgreSQL 数据库,我想知道 ODBC 和 Libpq 的优缺点是什么。据我所知,libpq 似乎更快,但我无法得到任何明确的答案或基准。
此外,是否有任何其他库可能比 ODBC/Libpq 更好。
我知道如何为 ubuntu 安装 libpq-dev,但我正在查看过去的问题,但无法找到如何为 Windows 安装软件包。是否有下载该软件包的地方或为其下载安装程序的地方?
我正在尝试连接到仅支持 SSL 连接的 Heroku Postgres。SSL 连接在其他工具 (Postico) 和编程环境 (Node.js) 中工作正常,但是当从 PHP 连接时,我总是收到此错误:
sslmode value "require" invalid when SSL support is not compiled
我的本地环境是 OS X,所有软件包都使用自制程序安装并具有 SSL 支持。pgsql 还具有基于 phpinfo() 输出的 SSL 支持:
SSL support => enabled
Libpq 和 Postgres 编译时支持 SSL:
-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lm
PHP 版本:7.2.5(也尝试过 5.6、7.1 分支)本地 Postgres 和 libpq 版本:10.3
尝试了我能想到的所有解决方案,但无法使此连接正常工作。通过自制软件安装时,Postgres 支持是为 PHP 7.2.5 编译出来的。不再有单独的 php-pgsql/php-pdo-pgsql 包。
我对psycopg2 文档感到困惑,它说:
另请注意,可以使用环境变量将相同的参数传递给客户端库。
我希望如果我导出了环境变量以便我可以使用 进行连接psql,那么我应该能够使用 psycopg2 以相同的方式建立连接。但情况似乎并非如此。
例如,在容器中运行一个全新的 postgresql:
$ docker port frosty_lichterman 5432
0.0.0.0:32768
$ export PGHOST=localhost PGUSER=postgres PGPORT=32768
Run Code Online (Sandbox Code Playgroud)
我现在可以使用 psql 进行连接,而无需提供任何显式连接字符串:
$ psql -c 'select 1;'
?column?
----------
1
(1 row)
Run Code Online (Sandbox Code Playgroud)
但在 python 中,我不能:
>>> import psycopg2 as p
>>> c = p.connect()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/michaels/.local/share/virtualenvs/Apps-XhIvHnVr/lib/python2.7/site-packages/psycopg2/__init__.py", line 127, in connect
raise TypeError('missing dsn and no parameters')
TypeError: missing dsn and no parameters
Run Code Online (Sandbox Code Playgroud)
即使我可以使用 Python …