我正在尝试启动一个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客户端?
这是Looking for help to send queries to Postgres from Perl的后续问题。