PostgreSQL 스키마를 위해 모든 테이블을 CSV로 덤프하는 방법은 무엇입니까?


11

많은 스키마가있는 데이터베이스가 있고 각 테이블 내용을 CSV로 덤프하려고합니다. COPY 명령을 알고 있지만 스키마의 모든 테이블을 읽고 COPY를 실행하는 스크립트를 작성하는 방법을 잘 모르겠습니다.

답변:


18

다음은 원하는 것을 수행 할 수있는 쉘 스크립트입니다.

SCHEMA="myschema"
DB="mydb"

psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" $DB |\
  while read TBL; do
    psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV" $DB > $TBL.csv
  done

DB 및 SCHEMA 변수를 특정 데이터베이스 및 스키마로 설정하십시오.

랩핑 psql 명령은 A 및 t 플래그를 사용하여 c 명령으로 전달 된 문자열에서 테이블 목록을 작성합니다.


3

모든 스키마를 내 보내야하는 경우 다음은 스크립트입니다.

PGDATABASE="db"
PGUSER="user"

psql -Atc "select schema_name from information_schema.schemata" |\
    while read SCHEMA; do
    if [[ "$SCHEMA" != "pg_catalog" && "$SCHEMA" != "information_schema" ]]; then
        psql -Atc "select tablename from pg_tables where schemaname='$SCHEMA'" |\
            while read TBL; do
                psql -c "COPY $SCHEMA.$TBL TO STDOUT WITH CSV DELIMITER ';' HEADER ENCODING 'UTF-8'" > $SCHEMA.$TBL.csv
            done
    fi
    done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.