NAME

PDK::DBI::Pg - PostgreSQL 数据库操作类

SYNOPSIS

use PDK::DBI::Pg;

my $db = PDK::DBI::Pg->new(
    host     => '127.0.0.1',
    port     => 5432,
    dbname   => 'testdb',
    user     => 'postgres',
    password => 'secret',
);

# 单条插入
$db->insert('users', { name => 'alice', age => 20 });

# 查询
my $rows = $db->select(table => 'users')->all;

# 批量插入
my $params = [
    [1, 'bob'],
    [2, 'charlie'],
];
$db->batchExecute($params, 'insert into users(id, name) values (?, ?)');

DESCRIPTION

该模块基于 DBIx::Custom 封装,继承 PDK::DBI::Role, 提供了 PostgreSQL 数据库的连接、批量执行、事务管理等功能。

对常见的 insertupdatedeleteexecute 方法进行了事务封装, 执行成功后自动提交,出错时自动回滚并抛出异常。

ATTRIBUTES

dsn

数据库连接字符串,例如:

dbi:Pg:dbname=test;host=localhost;port=5432
user

数据库用户名。

password

数据库密码。

host

主机名。如果未提供 dsn,可以通过 host/port/dbname 自动拼接。

port

端口号,默认 5432。

dbname

数据库名。

option

哈希引用,数据库连接选项。 默认值为:

{
    AutoCommit => 0,
    RaiseError => 1,
    PrintError => 0,
}
dbi

DBIx::Custom 对象。 提供 selectupdateinsertdeleteexecute 等方法的委托调用。

METHODS

clone()

克隆当前数据库对象,复制其连接参数,返回新对象。

batchExecute(\@params, $sql)

批量执行 SQL 语句。 内部调用 _rawExecute,适合大批量插入或复杂 SQL 的执行。

_rawExecute(\@params, $sql)

低层批量执行方法。 每 5000 条数据提交一次事务,以减少大事务对性能和内存的影响。

disconnect()

断开数据库连接。

reconnect()

重新建立数据库连接。 等价于先执行 disconnect,再调用内部的 _buildDbi

_buildDbi()

内部方法,用于构建 DBIx::Custom 对象。 会根据配置生成数据库连接,并应用默认或用户自定义的选项。

ERROR HANDLING

  • 所有数据库操作均在事务中执行,出错时会自动回滚。

  • 执行失败时,会抛出 Carp::confess 异常,并包含错误信息。

EXAMPLES

use PDK::DBI::Pg;

my $db = PDK::DBI::Pg->new(
    host     => '127.0.0.1',
    port     => 5432,
    dbname   => 'testdb',
    user     => 'postgres',
    password => 'secret',
);

eval {
    $db->insert('users', { name => 'alice', age => 20 });
};
if ($@) {
    warn "数据库操作失败: $@";
}

AUTHOR

WENWU YAN <968828@gmail.com>

LICENSE AND COPYRIGHT

This software is licensed under the same terms as Perl itself.