标签: libpq

PostgreSQL:从C/C++程序取消查询

我正在使用PostgreSQL 8.3,并在使用libpqAPI的C++中编写程序.我与PQsendQuery()函数异步执行命令.我正在尝试实现超时处理功能.我PQcancel()在超时到期时通过调用实现它.我使用一个返回100 000行(持续约0.5秒)并且超时为1毫秒的查询进行测试,发现不是取消命令,而是PQcancel()阻塞直到服务器完成执行,然后返回成功的查询.

据我所知,文档说即使成功取消请求,查询仍可能被执行.我的问题是PQcancel()阻塞我的执行线程,这是不可接受的,因为我使用异步处理(使用Boost Asio框架)所以我的程序,除了执行SQL查询之外可能还有其他任务,只在一个线程上运行.

PQcancel()阻止是正常的吗?有没有办法进行非阻塞取消请求?

c c++ postgresql libpq

6
推荐指数
1
解决办法
811
查看次数

Go - 使用 pgtypes 的正确方法

我正在开发一个简单的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

在我看来,这不是使用这些类型的最佳方式,这对我来说是违反直觉的。所以我的问题是,我做得对吗?有不同的方法吗?最终,有没有一种方法可以配置 …

go libpq pgx sqlc

6
推荐指数
1
解决办法
862
查看次数

使用远程机器的libpq在PostgreSQL中插入二进制大对象(BLOB)

你能给出一个使用libpq从远程机器在PostgreSQL数据库中插入二进制数据的例子.我的第二个问题是:是否有任何其他API比使用C++的libpq更有效.谢谢

c c++ database postgresql libpq

5
推荐指数
1
解决办法
4944
查看次数

从 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 编译并链接了客户端程序:

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)

postgresql cygwin libpq

5
推荐指数
1
解决办法
820
查看次数

Ruby on Rails/PostgreSQL - 启动服务器时库未加载错误

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)

postgresql macos ruby-on-rails libpq pg

5
推荐指数
2
解决办法
2597
查看次数

libpq,带参数插入

我想知道我是否可以使用 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)

谢谢。

postgresql libpq

5
推荐指数
1
解决办法
2970
查看次数

ODBC v Libpq:PostgreSQL 的 C 库

我将使用 C 库来连接和使用 PostgreSQL 数据库,我想知道 ODBC 和 Libpq 的优缺点是什么。据我所知,libpq 似乎更快,但我无法得到任何明确的答案或基准。

此外,是否有任何其他库可能比 ODBC/Libpq 更好。

c postgresql odbc libpq

5
推荐指数
1
解决办法
1400
查看次数

如何为 Windows 安装 libpq-dev 包

我知道如何为 ubuntu 安装 libpq-dev,但我正在查看过去的问题,但无法找到如何为 Windows 安装软件包。是否有下载该软件包的地方或为其下载安装程序的地方?

windows postgresql libpq

5
推荐指数
1
解决办法
2万
查看次数

PHP 和 PostgreSQL – 未编译 SSL 支持时 sslmode 值“require”无效

我正在尝试连接到仅支持 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 包。

php postgresql ssl libpq

5
推荐指数
1
解决办法
5452
查看次数

如何使用环境变量建立 psycopg2 连接?

我对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 …

python postgresql psycopg2 libpq

5
推荐指数
1
解决办法
4715
查看次数

标签 统计

libpq ×10

postgresql ×9

c ×3

c++ ×2

cygwin ×1

database ×1

go ×1

macos ×1

odbc ×1

pg ×1

pgx ×1

php ×1

psycopg2 ×1

python ×1

ruby-on-rails ×1

sqlc ×1

ssl ×1

windows ×1