问题标签 [dbd-pg]

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.

0 投票
2 回答
544 浏览

linux - 我可以使用 Perl、DBI 和 DBD::Pg 访问另一台机器上的 Postgre 数据库吗?

  • 我的机器:Linux RHEL 5.5.56(64 位)、Perl 5.8.8。Postgres 不在这台机器上。但是我可以ping Postgres 机器没有问题。我的机器显然可以从互联网上的 CPAN 安装 Perl 模块。
  • 'uname -a' 返回:Linux xxx 2.6.18-371.8.1.el5PAE #1 SMP Fri Mar 28 06:00:03 EDT 2014 i686 i686 i386 GNU/Linux
  • 其他机器有 Postgres 8.4。
  • 我是安装和使用任何 DBI 模块的新手。需要详细的初学者说明。
  • 我对我的 Linux 机器具有 root 访问权限。
  • 我认为 yum 报告说我安装了“postgresql-libs.i386”。`百胜安装| grep postgres`返回:'postgresql-libs.i386 8.1.23-10.el5_10 已安装'

这是我需要的吗?这是在我的系统上。

目标:我想从另一台机器上的 Postgres 服务器获取数据。我已经有数据库机器的数据库用户名、密码、IP。

使用 cpanm 我安装 DBI 就好了,没有错误。当我安装 DBD::Pg 时出现错误。CPAN 错误日志如下:

  • 我什至可以从另一台机器上的 Postgres 数据库中获取数据吗?
  • 有没有人有关于如何执行此操作的说明的链接?我已经在谷歌上搜索了一些东西,在 CPAN、Stackoverflow 和 Perlmonks 上阅读了一些东西,但没有任何结果。
  • http://dbi.tiddlyspot.com/上的常见问题解答没有特定于安装 DBD::Pg 的信息。
  • 如果我通过 yum 安装 Postgres,安装会覆盖任何文件,比如库吗?如果有,有哪些?我们确实在这台机器上使用了其他应用程序。

如果我得到这个工作,我的第一步就是显示关于 DBI 驱动程序的非常基本的信息。下一步是在 SELECT 语句中显示一个表中的几个字段。

我不会返回数百万条记录,但返回 100 条记录肯定是可行的。

谢谢!

0 投票
1 回答
424 浏览

perl - 如何在 DBD::Pg 中使用 pg_putcopydata 插入空值?

我正在用数百万条记录填充一个 postgres 表。为了加快这个过程,我正在使用 DBD:Pg 中的 pg_putcopydata。我正在关注这个例子:

有些记录的字段之一可能是空的。为了插入空值,我尝试在 pg_putcopydata 中使用“undef”、“Null”、“null”、“”、“NULL”。他们都没有工作。

如何使用 pg_putcopydata 插入 NULL 值?

0 投票
2 回答
228 浏览

perl - 我应该提交以下代码吗?

我的代码:

警告是:

如果我在第 171 行之后添加“$dbh->commit()”,上面的警告就消失了。

如果我没有在第 171 行之后添加“$dbh->commit()”,而是调用了“$hfpDbh->disconnect();” 在第 140 行,上述警告也消失了。

我的问题是: 警告意味着有未提交的交易?这就是为什么我需要明确提交或断开连接以修复警告。但是代码中只有 SELECT 操作。我错过了什么?

谢谢。

0 投票
1 回答
785 浏览

ruby - 无法使用 Ruby 连接到 postgresQL

我在档案中搜索过,但找不到我的困境的答案。我正在用 Ruby 编写代码,并在我的本地 Mac Yosemite 上使用 watir webdriver 框架,并希望连接到 linux 机器上的 postgres 数据库。

我在本地 Mac 上安装了所需的 ruby​​ gem

*当地宝石*

  • dbd-pg (0.3.9)
  • 皮克(0.18.4)
  • 分贝 (0.4.5, 0.4.4)

我正在使用以下代码。

在运行这个我得到这些错误

如果我使用代码

我得到错误

我是红宝石的新手。我该如何解决这些问题?

0 投票
1 回答
191 浏览

perl - 是否可以在 EV 回调中的 Perl 中进行类似 longjump 的操作?

我正在尝试在异步环境中模拟同步控制流。

目的是支持没有回调或阻塞请求的数据库请求。

我正在尝试使用该Coro模块,但我认为我不完全理解它。

以下是代码片段:

这是测试代码:

完整的模块和测试脚本在这里DBIx::PgCoroAnyEvent和这里01_sleeps.t

有人可以看看并解释我那里有什么问题吗?

0 投票
0 回答
1043 浏览

postgresql - 插入数据时 DBD::Pg 双编码 UTF8 字符

我正在尝试使用 DBD::Pg 将 UTF8 字符串插入 PostgreSQL,并且总是在数据库中获得双编码的 UTF8。如果我插入的字符串是 Latin1,我只会在数据库中得到正确的字符。

如何告诉 DBD::Pg 不要重新编码已经是 UTF8 的字符串?

测试脚本:

经过几次测试后的结果表:

(这是在带有 DBD::Pg 版本 3.5.3 的 Ubuntu 16.04 上。安装在 Ubuntu 12.04 上的 DBD::Pg 版本没有这个问题)

0 投票
0 回答
274 浏览

mysql - 使用 postgres 的 Perl 应用程序和带有重音字符的查询

我使用 Postgres 和 Perl 已经十年了。

我仍在运行的最古老的应用程序之一,政府地址和部门职责字典,在处理包含重音字符的查询术语时遇到问题,例如köln. 换句话说,只要查询词包含重音字符(主要是变音符号),就会返回 0 个结果。

我不得不提一下,这种行为只有在使用 Postgres 作为数据库的应用程序时才会发生。如果我切换到 MySQL5(相同数据)相同的查询工作正常。

试图跟踪此问题的原因,我检查了以下内容:

  • Postgres 数据库是 UTF-8(使用命令show server_encoding;
  • Postgres 客户端编码也是 UTF8(使用show client_encoding;
  • 如果我使用 Postgres 监视器并执行与应用程序相同的 SQL 查询,在查询词中使用重音字符,我会得到正确的结果
  • Perl 应用程序本身正在处理 UTF-8,HTML-Header 设置正确,输出内容显示正确且无乱码
  • 所有 Perl 代码文件、脚本、.pm 包文件和模板都是 UTF-8 编码的(我用 验证过file --mime perl_file_name
  • 我摆弄数据库连接,设置$self->{dbh}->{pg_enable_utf8} = 1;或/和$self->{dbh}->do("SET CLIENT_ENCODING TO 'UTF8';");或/和$self->{dbh}->do("SET NAMES 'UTF8';");没有变化
  • 我已经更新DBD::Pg module到 3.6.2 版,没有变化。

所以我几乎不知道还有什么要检查或尝试让 Postgres 充分工作。就像我在介绍中提到的那样,仅使用 MySQL 作为数据库的同一个应用程序可以完美运行。

2 年前,应用程序被更改为处理 UTF-8 数据,我自己并没有进行更改,但据我在代码中看到的(与我的 GIT 存储库中的代码相比)它只是 HTML UTF8-Headerprint "Content-type: text/html; charset=utf-8\n\n";和一些不相​​关的模板部分。也许某处的这种变化是所有问题的根源,但我不知道特别是什么。为 Postgres 进行调整。

当前的 Perl 版本是 5.22.1,使用 Apache/2.2.22 (Ubuntu)。虚拟主机配置很简单:

Postgres 版本为 9.1.24。

编辑:

CollateCtype设置为en_US.UTF-8,为相关数据库Encoding设置UTF-8为 。查看表格,所有character varying列都使用pg_catalog."default"排序规则。执行show lc_collate;节目已经提到en_US.UTF-8

编辑2:

使用DBD::Pg标志pg_enable_utf8并将其设置为0似乎可行,我得到了预期的结果。使用 以外的值0,例如 '-1 1'or不起作用。我在数据库连接后立即尝试了该标志(再次)。实际上我必须验证这一点,因为我仍然不明白发生了什么。

0 投票
0 回答
238 浏览

postgresql - 如何在一个系统上使用 DBD::Pg 连接到不同版本的 Postgres

我的生产系统使用 Postgres 9.3 和 Perl;我有一个测试 Postgres 10.3 数据库,我想针对它运行相同的 Perl 脚本以确保一切正常。

我正在使用 PerlDBIDBD::Pg连接到数据库。我在脚本中记录客户端和服务器版本,以便我始终知道正在使用什么。

在生产系统上,我的日志会显示如下内容:

当我对测试版本运行相同的脚本时,它说:

如何DBD::Pg使用 Postgres 10 库?我记得DBD::Pg第一次安装 Postgres 库时必须配置它;我可以有多种配置DBD::Pg吗?我正在使用 Perlbrew,所以我可以使用它来设置不同版本的 Perl,然后将我的所有模块重新安装到不同的版本;那会很痛苦,但这是可能的。

编辑:这里的重点是我想测试一个纯 Postgres 10.3 环境,而不会弄乱需要与生产 Postgres 9.3 系统同步的测试系统。如果不可能让一台机器使用不同的客户端,那么我将不得不设置一个新的测试系统。

0 投票
0 回答
396 浏览

perl - 获取 Postgres NOTIFY 的即时通知

DBD::Pg 有什么方法可以阻塞等待消息准备就绪时立即返回的 NOTIFY?

我有一个简单的测试脚本,可以使用 Postgres 的“通知”机制发送消息:

我还有一个简单的接收器脚本,它使用 LISTEN 来订阅消息:

问题是它$dbh->pg_notifies不会阻塞,所以如果队列中没有通知,它会立即返回undef。我已经放了sleep(10)它以便它不是一个繁忙的循环,但这当然意味着我在发送 NOTIFY 消息后但在我的 LISTEN 接收到它之前得到长达 10 秒的延迟。

一些搜索建议在libpq级别上,您可以select在套接字上执行一个以立即收到传入通知的通知,所以我尝试了这个:

但它似乎不起作用,select当我的 10 秒超时到期时,唯一的似乎返回。

在我看来,NOTIFY/LISTEN 提供了一种避免轮询循环的方法,但我似乎无法在没有轮询循环的情况下使其工作。建议?

0 投票
4 回答
1181 浏览

perl - 尝试在 Centos-7 上安装 DBD-Pg-2.19.3 时找不到 version.pm

在 Centos 7 上。

oracle DBD 安装得很好我在使用 Postgresql 版本时遇到了问题。

这是我正在运行的脚本:

postgresql DBD perl Makefile.PL 返回

但是定位显示: