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 파일 핸들을 닫지 않고 Postgres 클라이언트로 SQL 명령을 보내려면 어떻게해야합니까?
여기에 대한 질문은 Looking for help to send queries to Postgres from Perl입니다.
프로세스와 파이프를 망칠 필요없이 postgres 드라이버를 사용할 수 있습니까? http://search.cpan.org/~turnstep/DBD-Pg-2.19.3/Pg.pm –
기타 : http://www.techrepublic.com/article/retrieve-data-from-a- postgresql-database -using-the-perl-dbi/6039937 –
링크가 수정되었으므로 DBI와 DBD :: Pg가 이미 추천되었습니다. 이 사용 사례의 경우 실제로 추천 할 것입니다. IPC 사용을 계속 선택하면 비 차단 읽기가 더 도움이됩니다. 아마도 IO :: Select를 사용할 수 있습니다. 자세한 내용은이 토론 스레드를 참조하십시오. http://www.velocityreviews.com/forums/t887094-nonblocking-pipe-open.html –