psql - 명령 결과를 파일에 저장합니다.
저는 psql의\dt
데이터베이스의 모든 테이블을 나열하려면 결과를 저장해야 합니다.
psql 명령의 결과를 파일로 내보내는 구문은 무엇입니까?
psql의 도움으로 (\?
):
\o [FILE] 모든 쿼리 결과를 파일 또는 |파이프로 보냅니다.
명령 순서는 다음과 같습니다.
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
그러면 모든 db 작업 출력이 out에 기록됩니다.txt. '\o'를 입력하여 출력을 콘솔로 되돌립니다.
db=>\o
psql\o
명령이 이미 jhwist에 의해 설명되었습니다.
대안적인 접근법은 다음을 사용하는 것은COPY TO
서버의 파일에 직접 쓰는 명령입니다.이것은 psql의 표 형식이 아닌 당신이 선택한 구문 분석하기 쉬운 형식으로 덤프된다는 장점이 있습니다.또한 다음을 사용하여 다른 테이블/데이터베이스로 가져오기가 매우 쉽습니다.COPY FROM
.
NB! 이 작업은 다음을 필요로 합니다.superuser
또는pg_write_server_files
권한이 있으며 서버의 파일에 씁니다.
예:COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
필드 구분 기호로 ';'을 사용하여 CSV 파일을 만듭니다.
항상 그렇듯이 자세한 내용은 설명서를 참조하십시오.
pgsql 명령의 o 매개 변수를 사용합니다.
-o, --output=FILENAME 쿼리 결과를 파일(또는 |파이프)로 보냅니다.
psql -d DatabaseName -U UserName -c "SELECT * FROM TABLE" -o /root/Desktop/file.txt
\copy
이는 모든 사용자에게 작동할 수 있는 postgres 명령입니다.\dt에 대해 작동하는지 여부는 알 수 없지만 일반 구문은 다음 링크 Postgres SQL copy 구문에서 복제됩니다.
\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','
선택 쿼리의 출력을 CSV 파일로 제공된 파일 이름에 저장합니다.
편집:
내 psql 서버의 경우 다음 명령이 작동합니다. 이 명령은 이전 버전 v8.5입니다.
copy (select * from table1) to 'full_path_filename' csv header;
아래 쿼리를 사용하여 결과를 CSV 파일에 저장합니다.
\copy (your query) to 'file path' csv header;
예
\copy (select name,date_order from purchase_order) to '/home/ankit/Desktop/result.csv' csv header;
다음 오류가 발생한 경우
ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';');
ERROR: must be superuser to COPY to or from a file
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
다음과 같은 방법으로 실행할 수 있습니다.
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
이 명령은 전체 테이블을 csv로 저장하는 데 사용됩니다.
이를 위한 일부 내부 psql 명령이 존재한다고 가정하지만, 당신은 또한 실행할 수 있습니다.script
util-linux-ng 패키지의 명령:
설명 스크립트는 단말기에 인쇄된 모든 내용의 타이프스크립트를 만듭니다.
도커 접근법
psql 명령을 통해
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
또는 sql 파일에서 쿼리합니다.
docker exec -i %containerid% psql -U %user% < file.sql > data.txt
이 접근 방식은 원래 명령을 변경하거나 조정할 필요 없이 가장 단순한 명령부터 가장 복잡한 명령까지 모든 psql 명령과 함께 작동합니다.
참고: Linux 서버용.
- 명령 내용을 파일에 저장합니다.
모델
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
예
read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
curid INT := 0;
vdata BYTEA;
badid VARCHAR;
loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
begin
select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
into loc
from public.some_base where some_field = badid;
SELECT file||' '
INTO vdata
FROM public.some_base where some_field = badid;
exception
when others then
raise notice 'Block/PageNumber - % ',loc;
raise notice 'Corrupted id - % ', badid;
--return;
end;
end loop;
end;
$f$;
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
- 명령 실행
모델
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
예
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
- 명령 출력 보기/추적
cat sqlop
됐습니다! 감사합니다! =D
언급URL : https://stackoverflow.com/questions/5331320/psql-save-results-of-command-to-a-file
'itsource' 카테고리의 다른 글
SQL Server에서 관련 없는 내용을 쓰는 것을 중지하는 방법(1개 행이 영향을 받음) (0) | 2023.07.01 |
---|---|
iBeacon Bluetooth 프로필이란? (0) | 2023.06.26 |
구체화된 뷰 쿼리 수정 (0) | 2023.06.26 |
SQL Server에서 테이블 값 함수에 CTE 문을 사용하는 방법 (0) | 2023.06.26 |
Windows에서 명령줄을 통해 주피터 실행 (0) | 2023.06.26 |