问题标签 [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.
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 条记录肯定是可行的。
谢谢!
perl - 如何在 DBD::Pg 中使用 pg_putcopydata 插入空值?
我正在用数百万条记录填充一个 postgres 表。为了加快这个过程,我正在使用 DBD:Pg 中的 pg_putcopydata。我正在关注这个例子:
有些记录的字段之一可能是空的。为了插入空值,我尝试在 pg_putcopydata 中使用“undef”、“Null”、“null”、“”、“NULL”。他们都没有工作。
如何使用 pg_putcopydata 插入 NULL 值?
perl - 我应该提交以下代码吗?
我的代码:
警告是:
如果我在第 171 行之后添加“$dbh->commit()”,上面的警告就消失了。
如果我没有在第 171 行之后添加“$dbh->commit()”,而是调用了“$hfpDbh->disconnect();” 在第 140 行,上述警告也消失了。
我的问题是: 警告意味着有未提交的交易?这就是为什么我需要明确提交或断开连接以修复警告。但是代码中只有 SELECT 操作。我错过了什么?
谢谢。
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)
我正在使用以下代码。
在运行这个我得到这些错误
如果我使用代码
我得到错误
我是红宝石的新手。我该如何解决这些问题?
perl - 是否可以在 EV 回调中的 Perl 中进行类似 longjump 的操作?
我正在尝试在异步环境中模拟同步控制流。
目的是支持没有回调或阻塞请求的数据库请求。
我正在尝试使用该Coro
模块,但我认为我不完全理解它。
以下是代码片段:
这是测试代码:
完整的模块和测试脚本在这里DBIx::PgCoroAnyEvent
和这里01_sleeps.t
有人可以看看并解释我那里有什么问题吗?
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 版本没有这个问题)
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。
编辑:
Collate
并Ctype
设置为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
不起作用。我在数据库连接后立即尝试了该标志(再次)。实际上我必须验证这一点,因为我仍然不明白发生了什么。
postgresql - 如何在一个系统上使用 DBD::Pg 连接到不同版本的 Postgres
我的生产系统使用 Postgres 9.3 和 Perl;我有一个测试 Postgres 10.3 数据库,我想针对它运行相同的 Perl 脚本以确保一切正常。
我正在使用 PerlDBI
并DBD::Pg
连接到数据库。我在脚本中记录客户端和服务器版本,以便我始终知道正在使用什么。
在生产系统上,我的日志会显示如下内容:
当我对测试版本运行相同的脚本时,它说:
如何DBD::Pg
使用 Postgres 10 库?我记得DBD::Pg
第一次安装 Postgres 库时必须配置它;我可以有多种配置DBD::Pg
吗?我正在使用 Perlbrew,所以我可以使用它来设置不同版本的 Perl,然后将我的所有模块重新安装到不同的版本;那会很痛苦,但这是可能的。
编辑:这里的重点是我想测试一个纯 Postgres 10.3 环境,而不会弄乱需要与生产 Postgres 9.3 系统同步的测试系统。如果不可能让一台机器使用不同的客户端,那么我将不得不设置一个新的测试系统。
perl - 获取 Postgres NOTIFY 的即时通知
DBD::Pg 有什么方法可以阻塞等待消息准备就绪时立即返回的 NOTIFY?
我有一个简单的测试脚本,可以使用 Postgres 的“通知”机制发送消息:
我还有一个简单的接收器脚本,它使用 LISTEN 来订阅消息:
问题是它$dbh->pg_notifies
不会阻塞,所以如果队列中没有通知,它会立即返回undef
。我已经放了sleep(10)
它以便它不是一个繁忙的循环,但这当然意味着我在发送 NOTIFY 消息后但在我的 LISTEN 接收到它之前得到长达 10 秒的延迟。
一些搜索建议在libpq
级别上,您可以select
在套接字上执行一个以立即收到传入通知的通知,所以我尝试了这个:
但它似乎不起作用,select
当我的 10 秒超时到期时,唯一的似乎返回。
在我看来,NOTIFY/LISTEN 提供了一种避免轮询循环的方法,但我似乎无法在没有轮询循环的情况下使其工作。建议?
perl - 尝试在 Centos-7 上安装 DBD-Pg-2.19.3 时找不到 version.pm
在 Centos 7 上。
oracle DBD 安装得很好我在使用 Postgresql 版本时遇到了问题。
这是我正在运行的脚本:
postgresql DBD perl Makefile.PL 返回
但是定位显示: