我正在尝试启动一个 Postgres 客户端并保留它,以便我可以向它发送几个 SQL 命令并收集每个命令的结果。我当前的问题是第一组命令似乎没有发送到进程,除非我关闭文件句柄以发送命令。但是关闭文件句柄会破坏程序的全部目的。
这是代码:
my ($child_read, $child_write);
our $pid = open2($child_read, $child_write, '../psql -p 2070 super');
print STDOUT $pid . "\n";
$child_write->autoflush(1);
my $output1;
my $theCommands = "set schema 'super'; \n select count(*) from MyTable;";
print $child_write $theCommands;
close($child_write);
print "About to try and get query results. \n";
while (<$child_read>)
{
print "$_";
}
上面的代码有效。我得到了查询的结果,但我可以让 SQL 命令执行的唯一方法是关闭 $child_write 文件句柄。如果我不关闭它,那么程序在尝试读取行时会挂起。
如何在不关闭 $child_write 文件句柄的情况下将 SQL 命令发送到 Postgres 客户端?
这是寻找从 Perl 向 Postgres 发送查询的帮助的后续问题。