2012-04-09 3 views
1

PostgreSQL에서 300000 개가 넘는 삽입 명령을 포함하는 큰 배치가 있습니다. 심지어 pgAdmin에로드 할 수 없습니다 (충돌). 그래서 커맨드 라인과 \ i를 사용하여 파일을 실행하고 있습니다. 오류 메시지 (있는 경우)를보고 싶습니다. 명령 줄을 통해 메시지를 로그 파일에 저장하는 방법은 무엇입니까? 당신에게 은 이미 일부 other posts을 보았다하지만 도움이되지 수SQL 명령 결과를 파일로 저장하는 방법 (postgresql)

편집 감사합니다 당신의 도움 을 주셔서 감사합니다.

+0

300000 삽입 명령? 파일에서 데이터를 읽는 것이 더 쉬울까요? – wildplasser

+0

@wildplasser :) XML 파일을 삽입 명령으로 변환하여 DB를 채 웁니다. 그것이 고용주가 요구하는 것입니다 : 데이터베이스! "파일에서 데이터 읽기"? 당신이 다른 해결책을 제안 할 준비가 되셨습니까? 도와주세요. 감사합니다 – rahman

+1

XML이 단 하나의 (또는 몇 개의) 직사각형 데이터 테이블로 구성되면 .csv (또는 .tsv) 파일로 비교적 쉽게 변환 될 수 있습니다. (삽입 문으로 변환하는 것보다 쉬운, IMHO) – wildplasser

답변

2

unix 프롬프트에서 : (창에는 유사한 메커니즘이있을 수 있음).

psql -U my_username my_databasename <the_script.sql>the_output.log 

업데이트 : 위의 명령은 가정합니다은 "the_script.sql"를 읽을 수 있으며, 사용자가 쓸 수 있음을 실행하는 사용자에게 "the_output.log"(현재 디렉토리에이 경우)하는 경우 당신은 당신이 항상 psql -U my_username my_databasename <the_script.sql>/tmp/other_output.log

+0

내 계정 (vahid)으로 로그인했으며 데이터베이스 소유자는 postgres입니다. 그래서 명령은 다음과 같습니다 : vahid @ vahid-ThinkPad-T420 : ~/workspace/MATSIM $ psql -U postgres MATEST ./res.txt psql : FATAL : 사용자 "postgres"에 대한 피어 인증이 실패했습니다 – rahman

+0

sudo를 실행해도 아무런 변화가 없었습니다. – rahman

+0

출력 파일 소유자 (및 중간 디렉토리)를 postgres로 변경하면 또 다른 문제가 발생합니다. $ psql -U postgres MATEST /sqlresult/res.txt bash :/sqlresult/res .txt : 모든 아이디어가 거부되었습니다. 덕분에 – rahman

0
psql -e -f file_name db_name 2>&1 > log.txt 

당신이 전송됩니다 찾을 것입니다 흥미로운 로그의 대부분은 그렇게 표준 출력에 열려진 리디렉션, psql의에서 stderr에 같이 TMP/쓸 수있는, 어떤 이유로도 쓸 수 그런 다음 log.txt 파일에 넣으십시오.

관련 문제