Trebuie să extrag fișiere SQL din mai multe tabele ale unei baze de date PostgreSQL. Iată cu ce am venit până acum:
Totuși, după cum vedeți, toate tabelele care încep cu prefixul thr sunt exportate într-un singur fișier unificat (db_dump.sql). Am aproape 90 de tabele în total din care să extrag SQL, deci este obligatoriu ca datele să fie stocate în fișiere separate.
Cum o pot face? Mulțumesc anticipat.
4 Răspunsuri 4
Dacă doriți să codificați cu greu lista tabelelor, dar doriți doar ca fiecare să fie într-un fișier diferit, puteți utiliza o buclă de script shell pentru a rula comanda pg_dump de mai multe ori, înlocuind numele tabelului de fiecare dată în jurul buclei:
EDITAȚI | ×: Această abordare poate fi extinsă pentru a obține în mod dinamic lista tabelelor executând o interogare prin psql și introducând rezultatele în buclă în loc de o listă codificată dur:
Aici psql -t -c "SQL" rulează SQL și scoate rezultatele fără antet sau subsol; deoarece există o singură coloană selectată, va exista un nume de tabel pe fiecare linie a ieșirii capturate de $ (comandă), iar shell-ul dvs. va parcurge rândul lor una câte una.
De la versiunea 9.1 a PostgreSQL (septembrie 2011), se poate utiliza formatul directorului de ieșire atunci când faceți copii de rezervă
și 2 versiuni/la 2 ani după (PostgreSQL 9.3), --jobs/-j face chiar mai eficientă backupul tuturor obiectelor în paralel
dar ceea ce nu înțeleg în întrebarea dvs. inițială este că utilizați opțiunea -s care aruncă doar definițiile obiectului (schema), nu datele.
dacă doriți datele, nu utilizați -s, ci mai degrabă -a (numai date) sau nicio opțiune pentru a avea schemă + date
deci, pentru a face backup tuturor obiectelor (tabelelor.) care începe cu „th” pentru baza de date dbName din directorul dbName_objects/cu 10 joburi/procese concurente (crește încărcarea pe server):
pg_dump -Fd -f dbName_objects -j 10 -t 'thr_ *' -U UserName dbName
(puteți utiliza și -a/-s dacă doriți datele sau schema obiectelor)
ca rezultat, directorul va fi populat cu un toc.dat (tabelul conținutului tuturor obiectelor) și un fișier per obiect (.dat.gz) într-o formă comprimată
fiecare fișier este numit după numărul obiectului și puteți prelua lista cu următoarea comandă pg_restore:
pg_restore --list -Fd dbName_objects/| grep „DATE DE TABEL”
pentru a nu fi comprimat fiecare fișier (în SQL brut)
pg_dump --data-only --compress = 0 --format = director --file = dbName_objects --jobs = 10 --table = 'thr_ *' --usus = userName --dbname = dbName
- Ce este FAT (tabelul de alocare a fișierelor)
- Cuptorul de fumat 6 probleme potențiale - și cum să le remediați - Bob Vila
- Guvernul dosarului Odessa al județului Schuyler
- Numărul de calorii din diferite salate de fast-food - Insider
- De ce unii farts miros ca ouăle 5 tipuri diferite de flatulență, decodate pentru plăcerea ta de lectură