Làm cách nào tôi có thể kết xuất tất cả các bảng vào CSV cho lược đồ PostgreSQL?


10

Tôi có một cơ sở dữ liệu với rất nhiều lược đồ trong đó và tôi muốn chuyển từng nội dung của bảng sang CSV. Tôi biết về lệnh COPY nhưng tôi không chắc làm thế nào để kịch bản một cái gì đó sẽ đọc tất cả các bảng trong một lược đồ và thực thi COPY chống lại chúng.

Câu trả lời:


17

Đây là một kịch bản shell có thể làm những gì bạn muốn:

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

Đảm bảo rằng bạn đặt các biến DB và SCHema cho cơ sở dữ liệu và lược đồ cụ thể của bạn.

Lệnh gói psql sử dụng cờ A và t để tạo danh sách các bảng từ chuỗi được truyền cho lệnh c.


3

Nếu bạn cần xuất tất cả các lược đồ, đây là tập lệnh

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.