ฉันจะถ่ายโอนข้อมูลตารางทั้งหมดไปยัง CSV สำหรับ schema PostgreSQL ได้อย่างไร


11

ฉันมีฐานข้อมูลที่มีสคีมาจำนวนมากอยู่ในนั้นและฉันต้องการที่จะถ่ายโอนข้อมูลแต่ละเนื้อหาของตารางไปยัง CSV ฉันตระหนักถึงคำสั่ง COPY แต่ฉันไม่แน่ใจว่าจะเขียนสคริปต์สิ่งที่จะอ่านตารางทั้งหมดใน schema และเรียกใช้ 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.