标签: dbd-pg

Linux:如何安装DBD :: Pg模块?

已经安装了Postgres DB.我没有使用系统perl我在"/ srv/data203806/Migration/CPAN/localperl/bin"中安装了另一个perl.当我尝试安装时,它要求PATH TO pg_config:

[root1@frmrszvwb023 bin]# ./cpan install DBD::Pg
Reading '/root/.cpan/Metadata'
  Database was generated on Fri, 07 Mar 2014 03:53:02 GMT
Running install for module 'DBD::Pg'
Running make for T/TU/TURNSTEP/DBD-Pg-3.0.0.tar.gz
Checksum for /root/.cpan/sources/authors/id/T/TU/TURNSTEP/DBD-Pg-3.0.0.tar.gz ok

  CPAN.pm: Building T/TU/TURNSTEP/DBD-Pg-3.0.0.tar.gz

    Configuring DBD::Pg 3.0.0
    Path to pg_config?
    No POSTGRES_HOME defined, cannot find automatically
    Warning: No success on command[/srv/data203806/MUXmh-Migration/CPAN/localperl/bin/perl Makefile.PL]
    'YAML' not installed, will not store persistent state
      TURNSTEP/DBD-Pg-3.0.0.tar.gz
      /srv/data203806/MUXmh-Migration/CPAN/localperl/bin/perl Makefile.PL -- NOT OK
    Running make test
      Make had some problems, won't test
    Running …
Run Code Online (Sandbox Code Playgroud)

postgresql perl perl-module dbd-pg

10
推荐指数
6
解决办法
3万
查看次数

DBD :: Pg中的手动事务管理

我正在努力让手动交易按照DBD :: Pg中的说明工作,或者我只是误解了所述文档.

我的理解是,如果我想手动管理事务,我应该关闭AutoCommit.

$dbh->{AutoCommit} = 0;
$dbh->begin_work;
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我会遇到连续的错误

DBD::Pg::db begin_work failed: Already in a transaction
Run Code Online (Sandbox Code Playgroud)

要使其工作,我需要首先打开AutoCommit.

$dbh->{AutoCommit} = 1;
$dbh->begin_work;
Run Code Online (Sandbox Code Playgroud)

但这似乎与任何文档都不一致.

我只是误解了吗?

postgresql perl dbi dbd-pg

8
推荐指数
1
解决办法
1791
查看次数

如何确保DB(Postgres)连接在准备和执行之间仍然存在?

我有守护程序脚本,它在while循环中永远运行.我有一个准备好的语句,这个语句在每个循环上执行.

例:

  my $dbh;
  sub get_dbh {
      return DBI->connect(...);
  }

  my $dbh = get_dbh();
  my $sth = $dbh->prepare("SELECT ....") or die $DBI::errstr;

  while (1) {
      // is connection still there??
      //if (!$dbh->ping) {
      //    $dbh = get_dbh();
      //}

      $sth->execute('param1');

      // do some other things ... sleep between 0 and 3600
  }
Run Code Online (Sandbox Code Playgroud)

如果准备好的声明是在几小时前准备的,则会出现(或可能发生)问题.连接可能会死,我的执行也会死.在每次执行之前检查$ dbh-> ping看起来像是一种过度杀伤.

MySQL支持mysql_auto_reconnect,它确实有效.DBD :: Pg没有类似的东西.我读到了关于DBI :: Apache但我认为它依赖于mod_perl等.它显然是针对Web应用程序的.

是否有"最佳实践"方法来检查连接状态并在需要时重新连接?#

我可以在每个循环上准备语句,但这不是解决方案,而只是解决问题的方法.

postgresql connection perl reconnect dbd-pg

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

DBD::Pg 在 Mac OS 上连接到 Postgresql 速度很慢

经过一些更新(系统和brew - 我不知道哪个原因)后,Perl 的 DBD:Pg 建立与本地 Postgresql 实例的连接速度很慢。连接建立后执行查询并不慢。没有其他实用程序或驱动程序(psql、jdbc、.NET)的连接速度较慢。

此代码创建到本地 postgres 实例的连接:

#!/usr/bin/env perl

use strict;
use DBI;
use DBD::Pg;
use Carp;
  
my $appname = "test-connect";
my $host = "127.0.0.1";
my $port = "5432";
my $dbname = "postgres";
my $dbuser = "postgres";
my $password = "";
my $sslmode = "disable";

carp( "************* - DBI trace settings (before)= " . (DBI->trace() // '(none)'));
DBI->trace(DBD::Pg->parse_trace_flag('pglibpq'));
carp( "************* - DBI trace settings (after)= " . (DBI->trace() // '(none)'));

# Create the connection
carp("************* - …
Run Code Online (Sandbox Code Playgroud)

postgresql libpq dbd-pg

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

Mac OS X上的DBD :: Pg - 找不到任何方法

我从命令行执行.cgi(作为有权访问数据库的用户)

install_driver(Pg)失败:无法在@INC中找到DBD/Pg.pm(@INC包含:/ Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12/Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level/System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12.)at(eval 4)3行.也许DBD :: Pg perl模块还没有已完全安装,或者'Pg'的大写不正确.

cpan -D DBD :: Pg显示

DBD :: PG

用于DBI的Postgres驱动程序T/TU/TURNSTEP/DBD-Pg-2.19.2.tar.gz /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/DBD/Pg.pm已安装:2.19.2 CPAN:2.19.2最新DBD :: Pg开发人员(DBDPG)dbd-pg@perl.org

尝试通过PERL5LIB或PERLLIB导出上述路径没有不同的结果.

.cgi引用/ usr/bin/perl,它告诉我们

这是为darwin-thread-multi-2level构建的perl 5,版本12,subversion 4(v5.12.4)(有2个已注册的补丁,有关详细信息,请参阅perl -V)

我喜欢永久地将模块路径设置为安装DBD :: Pg的路径(/ opt/...).我想知道为什么错误输出目录列表没有提到.

我通过cpanm安装了DBD :: Pg.

我使用的是Mac OS X Mountain Lion.

macos perl cgi-bin dbd-pg

0
推荐指数
1
解决办法
2593
查看次数

perl DBI执行不识别'?'

我有这个代码:

if($update[$entity_id])
{
    my $sql = "UPDATE cache SET date = '?', value = '?' WHERE item_id = ? AND level = ? AND type = ?;";
}
else
{
    my $sql = "INSERT INTO cache (date, value, item_id, level, type) VALUES ('?','?',?,?,?);";
}
my $db = $self->{dbh}->prepare(q{$sql}) or die ("unable to prepare");
$db->execute(time2str("%Y-%m-%d %X", time), $stored, $entity_id, 'entity', 'variance');
Run Code Online (Sandbox Code Playgroud)

但是当它想要运行更新时,我收到此错误:

DBD :: Pg :: st执行失败:当需要0时,使用5个绑定变量调用.

为什么?

database postgresql perl dbd dbd-pg

-3
推荐指数
2
解决办法
993
查看次数

标签 统计

dbd-pg ×6

perl ×5

postgresql ×5

cgi-bin ×1

connection ×1

database ×1

dbd ×1

dbi ×1

libpq ×1

macos ×1

perl-module ×1

reconnect ×1