복붙노트

[SQL] 저장 PL / CSV 파일로 PostgreSQL의에서 pgSQL의 출력

SQL

저장 PL / CSV 파일로 PostgreSQL의에서 pgSQL의 출력

CSV 파일에 PostgreSQL 데이터베이스에서 PL / pgSQL의 출력을 저장하는 가장 쉬운 방법은 무엇입니까?

나는에서 쿼리를 실행 pgAdmin III 및 PSQL 플러그인과 PostgreSQL을 8.4을 사용하고 있습니다.

해결법

  1. ==============================

    1.서버에 결과 파일을 원하는, 또는 클라이언트에 있습니까?

    서버에 결과 파일을 원하는, 또는 클라이언트에 있습니까?

    당신은 재사용 또는 자동화에 쉽게 무언가를 원한다면, 당신은 PostgreSQL을의 COPY 명령 내장을 사용할 수 있습니다. 예를 들면

    Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ',';
    

    이 방법은 원격 서버에서 완전히 실행 - 그것은 당신의 로컬 PC에 쓸 수 없습니다. 또한 포스트 그레스는 그 시스템의 로컬 파일 시스템으로 불쾌한 일을 중지 할 수 없기 때문에 (일반적으로 "루트"라고 함) 포스트 그레스 "수퍼 유저"로 실행해야합니다.

    즉 실제로 당신이 슈퍼 유저 당신이를 것처럼 실행하는 기능을하는 기능을 만들 수있는 SECURITY DEFINER 옵션을 사용할 수 있기 때문에 (즉, 다른 종류의 보안 위험이 될 것 자동화)로 연결되는 것은 아닙니다 수퍼 유저가됩니다.

    결정적인 부분은 함수가 추가 검사를 수행 할 수 있다는 것입니다뿐만 아니라 바이 패스 보안을 - 당신이 필요로하는 정확한 데이터를 내보내는 기능을 쓸 수, 또는 당신이만큼 다양한 옵션을 적용 할 수있는 무언가를 쓸 수 있도록 그들이 엄격한 화이트리스트를 만난다. 당신은 두 가지를 확인해야합니다 :

    나는 수출 (또는 수입) 파일과 테이블 엄격한 조건을 충족하는 것이 기능의 몇 가지 예를 포함하여이 방법에 확장 블로그 포스트를 작성했습니다.

    다른 방법은 응용 프로그램이나 스크립트에서 클라이언트 측에서 처리하는 파일, 즉을하는 것입니다. 포스트그레스 서버가 파일을 저장하려는하는지 알 필요가 없다, 그냥 데이터와 어딘가에 클라이언트 풋 그것을 밖으로 뱉어.

    이에 대한 기본 구문은 COPY TO STDOUT 명령이며, pgAdmin와 같은 그래픽 도구는 좋은 대화에서 당신을 위해 그것을 포장됩니다.

    psql의 명령 줄 클라이언트는 "진짜"COPY로 모두 같은 옵션을 취 복사 \라는 특별한 "메타 명령"을 가지고 있지만, 클라이언트 내에서 실행됩니다 :

    \copy (Select * From foo) To '/tmp/test.csv' With CSV
    

    메타 명령은 SQL 명령과는 달리, 개행 문자로 종료되기 때문에, 더 종료가 없음을 참고.

    워드 프로세서 :

    귀하의 응용 프로그램 프로그래밍 언어도 밀거나 데이터를 가져 오는에 대한 지원이있을 수 있지만, 입력 / 출력 스트림을 연결하는 방법이 없기 때문에 당신은 일반적으로, 표준 SQL 문 내에서 STDIN / TO STDOUT에서 복사를 사용할 수 없습니다. PHP의 PostgreSQL의 처리기 (되지 PDO)는 대용량 데이터 세트에 대한 효율적인하지 않을 수 PHP 배열로부터 / 복사 매우 기본적인 pg_copy_from pg_copy_to 및 기능을 포함한다.

  2. ==============================

    2.몇 가지 해결책이 있습니다 :

    몇 가지 해결책이 있습니다 :

    psql의 -d DBNAME -t -A -F ","-c> output.csv "사용자가 SELECT * FROM"

    취득 할 수 있도록 - 이것은 당신이 호스트 명령 @ ssh를 포스트 그레스처럼, SSH를 통해 그것을 사용 할 수 있다는 큰 장점이있다

    COPY CSV와 사람 '/tmp/output.csv'(사용자로부터 SELECT *);

    >psql dbname
    psql>\f ','
    psql>\a
    psql>\o '/tmp/output.csv'
    psql>SELECT * from users;
    psql>\q
    

    그들 모두는 스크립트에서 사용할 수 있습니다,하지만 난 # 1을 선호합니다.

  3. ==============================

    3.CVS를 파일로 단말 (DB를 연결하면서) 출력 세트

    CVS를 파일로 단말 (DB를 연결하면서) 출력 세트

    ''1) 세트 필드 분리 :

    \f ','
    

    2) 설정된 출력 포맷 정렬되지 않은 :

    \a
    

    3) 만 표시 튜플 :

    \t
    

    4) 세트의 출력 :

    \o '/tmp/yourOutputFile.csv'
    

    5) 쿼리를 실행합니다 :

    :select * from YOUR_TABLE
    

    6) 출력 :

    \o
    

    그런 다음이 위치에 csv 파일을 찾을 수있을 것입니다 :

    cd /tmp
    

    이 scp 명령을 사용하거나 편집 나노를 사용하여 복사합니다 :

    nano /tmp/yourOutputFile.csv
    
  4. ==============================

    4.당신은 헤더와 함께 특정 테이블의 모든 컬럼에 관심이 있다면, 당신은 사용할 수 있습니다

    당신은 헤더와 함께 특정 테이블의 모든 컬럼에 관심이 있다면, 당신은 사용할 수 있습니다

    COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER;
    

    이보다 작은 비트 간단합니다

    COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER;
    

    이는 제가 아는 한, 동일합니다.

  5. ==============================

    5.이 정보는 정말 잘 표현되지 않습니다. 이것이 내가이를 도출하기 위해 필요한 한 두 번째 시간입니다, 나는 아무것도 경우 자신을 상기시키기 위해 여기를 넣을 수 있습니다.

    이 정보는 정말 잘 표현되지 않습니다. 이것이 내가이를 도출하기 위해 필요한 한 두 번째 시간입니다, 나는 아무것도 경우 자신을 상기시키기 위해 여기를 넣을 수 있습니다.

    정말 가장 좋은 방법은이 작업을 수행하는 (GET CSV 포스트 그레스 점 만점) 복사본을 사용하는 것입니다 ... TO STDOUT 명령. 당신은 그것을 여기에 답을 표시하는 방법을 싶지 않아 있지만. 명령을 사용하는 올바른 방법은 다음과 같습니다

    COPY (select id, name from groups) TO STDOUT WITH CSV HEADER
    

    그것은 SSH를 사용하기 위해 좋은입니다 :

    $ ssh psqlserver.example.com 'psql -d mydb "COPY (select id, name from groups) TO STDOUT WITH CSV HEADER"' > groups.csv
    

    그것은 ssh를 통해 고정 표시기 내부에 사용하기 위해 좋은입니다 :

    $ ssh pgserver.example.com 'docker exec -tu postgres postgres psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv
    

    그것은 로컬 컴퓨터도 좋아요 :

    $ psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv
    

    또는 로컬 컴퓨터에 고정 표시기 내부?

    docker exec -tu postgres postgres psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv
    

    아니면는 Kubernetes 클러스터에서, 고정 표시기에서, HTTPS를 통해 ?? :

    kubectl exec -t postgres-2592991581-ws2td 'psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv
    

    그래서 다양한 많은 쉼표!

    예 내가 한, 여기에 내 노트는 다음과 같습니다

    사용 / 효율적으로 IT1을 실행중인 사용자로, psql의 명령이 실행되는 어떤 시스템에서 파일 작업을 실행 복사합니다. 원격 서버에 연결하는 경우, 그것의 간단한 원격 서버에서 psql의에 / 실행 시스템에 데이터 파일을 복사합니다.

    COPY는 백엔드 프로세스 사용자 계정 (기본 포스트 그레스)와 같은 서버에 파일 작업을 실행, 파일 경로와 권한을 확인하고 그에 따라 적용됩니다. 다음 TO STDOUT를 사용하는 경우 파일 권한 검사는 생략된다.

    psql의 당신이 궁극적으로 상주 결과 CSV를 할 시스템에서 실행되지 않는 경우이 옵션은 모두 이후의 파일 이동이 필요합니다. 당신이 대부분 원격 서버에서 작동 할 때, 내 경험, 가능성이 가장 높은 경우입니다.

    그것은 간단 CSV 출력을위한 원격 시스템에 SSH를 통해 TCP / IP 터널과 같은 구성 뭔가 더 복잡하지만 다른 출력 형식 (이진)을 위해 로컬 psql의를 실행, 터널링 연결을 통해 더 나은에 / 복사 할 수있다. 비슷한 맥락에서, 큰 수입을 위해, 서버에 소스 파일을 이동하고 복사를 사용하는 것은 아마 최고 성능 옵션입니다.

    psql의 매개 변수를 사용하면 CSV와 같은 출력을 포맷 할 수 있지만, 호출기 및 못하고 헤더를 사용하지 않도록 기억해야하는 등의 단점이있다 :

    $ psql -P pager=off -d mydb -t -A -F',' -c 'select * from groups;'
    2,Technician,Test 2,,,t,,0,,                                                                                                                                                                   
    3,Truck,1,2017-10-02,,t,,0,,                                                                                                                                                                   
    4,Truck,2,2017-10-02,,t,,0,,
    

    아니, 그냥 컴파일 및 / 또는 도구를 설치하지 않고 내 서버의 CSV를 싶어.

  6. ==============================

    6.나는 오류 메시지를 수신하기 때문에 \ COPY를 사용했다 :

    나는 오류 메시지를 수신하기 때문에 \ COPY를 사용했다 :

    ERROR:  could not open file "/filepath/places.csv" for writing: Permission denied
    

    그래서 사용 :

    \Copy (Select address, zip  From manjadata) To '/filepath/places.csv' With CSV;
    

    그것은 작동

  7. ==============================

    7.psql의 당신을 위해이 작업을 수행 할 수 있습니다

    psql의 당신을 위해이 작업을 수행 할 수 있습니다

    edd@ron:~$ psql -d beancounter -t -A -F"," \
                    -c "select date, symbol, day_close " \
                       "from stockprices where symbol like 'I%' " \
                       "and date >= '2009-10-02'"
    2009-10-02,IBM,119.02
    2009-10-02,IEF,92.77
    2009-10-02,IEV,37.05
    2009-10-02,IJH,66.18
    2009-10-02,IJR,50.33
    2009-10-02,ILF,42.24
    2009-10-02,INTC,18.97
    2009-10-02,IP,21.39
    edd@ron:~$
    

    여기에 사용되는 옵션에 도움을 남자 psql를 참조하십시오.

  8. ==============================

    8.나는 COPY TO 기능을 지원하지 않습니다 AWS Redshift에, 일하고 있어요.

    나는 COPY TO 기능을 지원하지 않습니다 AWS Redshift에, 일하고 있어요.

    내 BI 도구 지원 탭으로 구분 된 CSV를하지만, 나는 다음을 사용하므로 :

     psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv
    
  9. ==============================

    9.새로운 버전 - psql의 12 - --csv 지원합니다.

    새로운 버전 - psql의 12 - --csv 지원합니다.

    용법:

    psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres
    
    psql -c "SELECT * FROM pg_catalog.pg_tables" --csv -P csv_fieldsep='^'  postgres
    
    psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres > output.csv
    
  10. ==============================

    10.pgAdmin III에서 쿼리 창에서 파일로 내보낼 수있는 옵션이 있습니다. 메인 메뉴 그것의 쿼리에서 -> 파일을 실행하거나 같은 일을 (그냥 쿼리를 실행하는 일반 녹색 삼각형 반대로 파란색 플로피 디스크 녹색 삼각형의) 수행하는 버튼이있다. 쿼리 창에서 쿼리를 실행하지 않는 경우 그때 IMSoP 제안 일을하고 복사 명령을 사용하십시오.

    pgAdmin III에서 쿼리 창에서 파일로 내보낼 수있는 옵션이 있습니다. 메인 메뉴 그것의 쿼리에서 -> 파일을 실행하거나 같은 일을 (그냥 쿼리를 실행하는 일반 녹색 삼각형 반대로 파란색 플로피 디스크 녹색 삼각형의) 수행하는 버튼이있다. 쿼리 창에서 쿼리를 실행하지 않는 경우 그때 IMSoP 제안 일을하고 복사 명령을 사용하십시오.

  11. ==============================

    11.나는 적절한 CSV의 결과로, COPY 쿼리 TO STDOUT 패턴을 캡슐화하는 작은 도구라는 psql2csv를 작성했습니다. 그것의 인터페이스는 psql의 유사합니다.

    나는 적절한 CSV의 결과로, COPY 쿼리 TO STDOUT 패턴을 캡슐화하는 작은 도구라는 psql2csv를 작성했습니다. 그것의 인터페이스는 psql의 유사합니다.

    psql2csv [OPTIONS] < QUERY
    psql2csv [OPTIONS] QUERY
    

    쿼리는 STDIN의 내용으로 존재하는 경우, 또는 마지막 인수를 가정한다. 다른 모든 인수는 다음을 제외하고 PSQL에 전달됩니다 :

    -h, --help           show help, then exit
    --encoding=ENCODING  use a different encoding than UTF8 (Excel likes LATIN1)
    --no-header          do not output a header
    
  12. ==============================

    12.나는 몇 가지를 시도했지만 그들 중 몇은 헤더 세부 나에게 원하는 CSV를 제공 할 수 있었다.

    나는 몇 가지를 시도했지만 그들 중 몇은 헤더 세부 나에게 원하는 CSV를 제공 할 수 있었다.

    여기에 나를 위해 일한 것입니다.

    psql -d dbame -U username \
      -c "COPY ( SELECT * FROM TABLE ) TO STDOUT WITH CSV HEADER " > \
      OUTPUT_CSV_FILE.csv
    
  13. ==============================

    13.당신은 더 이상 질의가 있고 사용 psql 프로그램을 좋아하는 경우에 다음 파일에 쿼리를 넣고 다음 명령을 사용합니다 :

    당신은 더 이상 질의가 있고 사용 psql 프로그램을 좋아하는 경우에 다음 파일에 쿼리를 넣고 다음 명령을 사용합니다 :

    psql -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv
    
  14. ==============================

    14.HEADER이 명령을 사용할 때 열 이름으로 CSV 파일을 다운로드하려면 :

    HEADER이 명령을 사용할 때 열 이름으로 CSV 파일을 다운로드하려면 :

    Copy (Select * From tableName) To '/tmp/fileName.csv' With CSV HEADER;
    
  15. ==============================

    15.내가보기 엔 DataGrip, JetBrains의에 의해 데이터베이스 IDE를 권 해드립니다. 당신은 CSV 파일에 SQL 쿼리를 내보낼 수 있고, 쉽게 SSH 터널링을 설정할 수 있습니다. 문서는 "결과 집합"을 참조 할 때, 그들은 콘솔에서 SQL 쿼리에 의해 반환 된 결과를 의미한다.

    내가보기 엔 DataGrip, JetBrains의에 의해 데이터베이스 IDE를 권 해드립니다. 당신은 CSV 파일에 SQL 쿼리를 내보낼 수 있고, 쉽게 SSH 터널링을 설정할 수 있습니다. 문서는 "결과 집합"을 참조 할 때, 그들은 콘솔에서 SQL 쿼리에 의해 반환 된 결과를 의미한다.

    난 그냥 제품을 사랑 DataGrip과 관련이없는거야!

  16. ==============================

    16.JackDB, 웹 브라우저에서 데이터베이스 클라이언트는 정말 쉽게이 있습니다. 특히 당신에게 Heroku에있는 경우.

    JackDB, 웹 브라우저에서 데이터베이스 클라이언트는 정말 쉽게이 있습니다. 특히 당신에게 Heroku에있는 경우.

    그것은 당신이 원격 데이터베이스와 그들에 실행 된 SQL 쿼리에 연결할 수 있습니다.

    출처 (출처 : jackdb.com)

    당신의 DB가 연결되면, 당신은 (오른쪽 아래 참조) CSV 나 TXT에 대한 질의 및 수출을 실행할 수 있습니다.

    참고 : 나는 JackDB와 제휴 어떠한 방식입니다. 나는 현재 자신의 무료 서비스를 사용하고 좋은 제품 같아요.

  17. ==============================

    17.이 모든 응답을 읽지 않는 사람들이 손실되지 않도록 @ skeller88의 요청에 따라, 나는 대답으로 내 의견을 다시 게시하고 ...

    이 모든 응답을 읽지 않는 사람들이 손실되지 않도록 @ skeller88의 요청에 따라, 나는 대답으로 내 의견을 다시 게시하고 ...

    DataGrip의 문제는 당신의 지갑에 그립을두고 있다는 점이다. 그것은 무료로하지 않습니다. dbeaver.io에서 DBeaver의 커뮤니티 에디션을 사용해보십시오. MySQL은, 포스트 그리 SQL, SQLite, 오라클, DB2, SQL 서버, 사이베이스, MS 액세스, 테라 데이타, 파이어 버드, 하이브, 프레스토 등 : 그것은 모든 인기있는 데이터베이스를 지원하는 SQL 프로그래머, DBA와 분석을위한 FOSS 멀티 플랫폼 데이터베이스 도구입니다

    DBeaver 커뮤니티 에디션은 사소한 데이터를 검색 한 다음 CSV, JSON, SQL, 또는 다른 일반적인 데이터 형식에 저장 결과 세트를 다운로드, 데이터베이스에 문제가 쿼리를 연결할 수 있습니다. 그것은 오라클 포스트 그레스, SQL Server에 대한 두꺼비, 또는 두꺼비에 대한 두꺼비에 가능한 FOSS의 경쟁입니다.

    나는 DBeaver 아무 제휴가 없습니다. 나는 가격과 기능을 좋아하지만 나는 그들이 더 DBeaver / 이클립스 응용 프로그램을 열 텐데하고 쉽게 아니라 직접 내에서 그래프와 차트를 생성하기 위해 연간 가입 비용을 지불 사용자가 필요로하는 것보다, DBeaver / 이클립스에 분석 위젯을 추가하려고 응용 프로그램. 내 자바 코딩 기술은 녹슨와 나는 이클립스 위젯을 구축 할 경우에만 DBeaver이 DBeaver Community Edition으로 타사 위젯을 추가 할 수있는 기능을 사용할 것을 찾는 방법을 재 학습에 주를 복용 기분이 안.

    마 DBeaver 사용자는 DBeaver의 커뮤니티 에디션에 추가 할 수있는 분석 위젯을 작성하는 단계에로 통찰력을 가지고?

  18. ==============================

    18.

    import json
    cursor = conn.cursor()
    qry = """ SELECT details FROM test_csvfile """ 
    cursor.execute(qry)
    rows = cursor.fetchall()
    
    value = json.dumps(rows)
    
    with open("/home/asha/Desktop/Income_output.json","w+") as f:
        f.write(value)
    print 'Saved to File Successfully'
    
  19. from https://stackoverflow.com/questions/1517635/save-pl-pgsql-output-from-postgresql-to-a-csv-file by cc-by-sa and MIT license