2013-04-13 4 views
0

DBI 나 데이터베이스 인터페이스 모델을 사용하지 않고 perl 스크립트가 PostgreSQL의 데이터베이스를 채워야합니다. 나는 너무 자연스럽게 스크립팅을하는 초보자이며, 꽤 오랫동안이 일에 매달 렸습니다. 나는 단지 이것까지 많이 가지고있다.DBI를 사용하지 않고 perl 스크립트

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)"; 
} 

하지만 나에게 다른 사람들과 마찬가지로

+0

큰 SQL 파일을 생성하는 것이 더 나을 것입니다. 그리고 그것을 읽으려면 포스트 그레스로 포격하는 것이 좋습니다. 'open'을 통한 statement-by-statement의 인터랙션은 끔찍하게 복잡해질 수 있습니다. –

+2

'print $ pipe "SELECT * FROM TheTable; \ n"'하지만 DBI를 사용하는 것이 더 낫습니다. 당신이 시도하는 것은 합리적인 것이 아닙니다. –

+0

예를 들어 설명해 주시겠습니까? – user1943079

답변

1

말 구문 오류를 제공, DBI는 파이프에 인쇄하는 것보다 훨씬 낫다.

그러나 중간 집이 있습니다. 모든 SQL을 표준 출력으로 인쇄 한 다음 다음과 같이하십시오.

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

이렇게하면 스크립트 출력을 쉽게 확인하고 파일로 보낼 수 있습니다. psql 옵션은 첫 번째 오류에서 멈추고 트랜잭션의 모든 것을 랩핑하고 STDIN에서 읽습니다. 일반적인 -h/-U 옵션도 필요할 수 있습니다.

개인적으로 필자는 두 개의 터미널을 열고 psql 프롬프트에서 .sql 파일에 쓰기 만하면됩니다. 나는 어떤 명령을 실행했는지 기록하는 것을 좋아한다.

관련 문제