【问题标题】:perl script without using DBI不使用 DBI 的 perl 脚本
【发布时间】:2013-04-06 01:26:12
【问题描述】:

我必须在不使用 DBI 或任何类型的数据库接口模型的情况下制作一个 perl 脚本来填充 PostgreSQL 中的数据库。我是一个很自然的脚本初学者,我已经坚持了很长一段时间。我目前只有这么多。

    open my $pipe, '|-', "psql -d postgres -U postgres", @options or die;
    # NOT SURE WHAT TO DO AFTER THIS

    close $pipe;

编辑 1:现在我正在尝试这样做。

 for ($count = $iters; $count >= 1; $count--) {
    $randdecimal = rand();
    $pipe "INSERT INTO random_table (runid, random_number) VALUES ($runid, $randdecimal)";
 }

但它给了我一个语法错误

【问题讨论】:

  • 你最好生成一个大的 sql 文件,然后把它交给 postgres 来阅读。通过 open 逐个声明交互可能会变得非常复杂。
  • print $pipe "SELECT * FROM TheTable;\n",但你最好大量使用 DBI。你的尝试是不明智的。
  • 您能否详细说明一下,或者提供一个示例?
  • 如果你问我,答案是否定的。我太喜欢你了,不愿意忍受在 Perl 中通过管道处理 SQL 的痛苦。
  • 但我需要做的就是向表中插入任意次数。仅此而已

标签: database perl postgresql populate


【解决方案1】:

正如其他人所说,DBI 比打印到管道要好得多

但是,有一个中途的房子。只需将所有 SQL 打印到 STDOUT,然后执行以下操作:

myscript.pl | psql -v ON_ERROR_STOP=1 --single-transaction -f -

这使您可以轻松检查脚本输出/将其发送到文件。 psql 选项在第一个错误时停止,将所有内容包装在事务中并从 STDIN 读取。您可能也需要通常的 -h/-U 选项。

就个人而言,我倾向于打开两个终端,然后从 psql 提示符写入 .sql 文件,然后写入 \i。我喜欢记录我运行的命令。

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2023-04-10
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多