Sunt destul de sigur că fiecare dintre noi a fost într-o situație în care a trebuit să genereze un raport și/sau să extragă niște date dintr-o bază de date și să le prezinte într-o foaie de calcul. În multe cazuri, clienții noștri preferă Excel pentru a gestiona foile de calcul/rapoarte, pentru că, duh, este Excel.

Atunci, cum abordați această problemă? Copiați și lipiți datele? Sau folosiți o interfață grafică aRDBMS pentru a genera raportul într-o foaie de calcul? Astăzi, vă voi arăta o funcție foarte mică, dar convenabilă a PostgreSQL -COPY.

Bună ziua COPY#

Din documentația COPY: „COPY mută datele între tabelele PostgreSQL și fișierele standard ale sistemului de fișiere. COPY TO copiază conținutul unui tabel într-un fișier, în timp ceCOPY FROM copiază datele dintr-un fișier într-un tabel (adăugând datele la ceea ce se află deja în tabel). COPY TO poate, de asemenea, să copieze rezultatele unei interogări SELECT.”

Deci, ce face COPY:

  1. Poate copia conținutul unui fișier (date) într-un tabel, sau
  2. Poate copia conținutul unui tabel (sau rezultatul unei interogări SELECT) într-un fișier.

În cazul în care se specifică o listă de coloane, COPY va copia numai datele din coloanele specificate în sau din fișier. Dacă există coloane în tabel care nu se află în lista de coloane, COPY FROM va insera valorile implicite pentru acele coloane.

COPY cu un nume de fișier instruiește serverul PostgreSQL să citească direct dintr-un fișier sau să scrie într-un fișier. Fișierul trebuie să fie accesibil serverului, iar numele trebuie să fie specificat din punctul de vedere al serverului. Atunci când este specificat STDIN sau STDOUT, datele sunt transmise prin conexiunea dintre client și server.

Sună bine? Haideți să încercăm!

Disclaimer: COPY are capacitatea de a citi/scrie date din/în fișiere CSV și binare. Deși sunt sigur că există o mulțime de cazuri de utilizare a fișierelor binare, în această postare pe blog mă voi concentra doar pe utilizarea acestuia pentru fișierele CSV deoarece, personalpentru mine, acestea sunt cele mai convenabile pentru a manipula seturi de date.

COPY TO#

Când doriți să creați un fișier CSV dintr-o interogare SELECT sau să aruncați tot conținutul unui tabel într-un fișier CSV, puteți utiliza comanda „COPY … TO …”.

Utilizarea unei interogări SELECT#

Când doriți să copiați un set de rezultate într-un fișier CSV, formatul comenzii COPY este:

1
COPY (<select-query-here>) TO <file-path>;

Sau, un exemplu mai real:

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv';

După cum puteți vedea, folosim comanda COPY care copiază rezultatele într-un fișier CSV pe sistemul de fișiere local. Puteți duce interogarea mult mai departe. Iată un exemplu din viața reală a unui proiect la care lucrez în prezent:

1
COPY (SELECT price_rules.* FROM quotes LEFT JOIN price_rules ON quotes.id = price_rules.chargeable_id where quotes.id = 437) TO '~/Desktop/exports/price_rules.csv' CSV;

După cum vedeți, puteți folosi orice interogare SELECT care poate va returna un set de rezultate de date.Dar, ce este un CSV fără anteturi, nu? 🙂

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV HEADER;

Adăugarea cuvântului cheie HEADER la sfârșit va include anteturi în fișierul CSV, care sunt numele coloanelor din tabel.

De asemenea, o altă caracteristică cheie a fișierelor CSV sunt delimitatorii. În funcție de caracterul delimitator pe care doriți să îl aibă fișierul CSV, puteți specifica caracterul în comandă:

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV DELIMITER ',' HEADER;

Utilizarea unui nume de tabel#

Când doriți ca un întreg tabel să fie descărcat într-un CSV, comanda este cu adevărat mai simplă. Trebuie doar să specificați numele tabelului și fișierul țintă:

1
COPY people TO '~/Desktop/people.csv' CSV DELIMITER ',' HEADER;

Asta e tot.

COPY FROM#

Acum, când doriți să injectați datele din fișierul CSV într-un tabel, puteți utiliza comanda „COPY &mldr; FROM &mldr;”. Sintaxa este foarte asemănătoare, cu o singură cheie de diferență:

1
COPY <table-name> FROM <file-path> DELIMITER ',' CSV HEADER;

Sau, folosind un exemplu din viața reală:

1
COPY addresses FROM '~/Desktop/addresses.csv' DELIMITER ',' CSV HEADER;

Outro#

COPIA este o caracteristică foarte bună și interesantă a Postgres. Pentru brewity, am încercat să păstrez acest blogpost scurt și simplu. Dacă aveți gânduri și întrebări nu ezitați să îmi scrieți un comentariu. Sau, dacă nu vă simțiți în stare să discutați, vă puteți îndrepta către documentația COPY.

V-a plăcut acest articol? Abonează-te la newsletter-ul meu și primește postările mele proaspete în căsuța ta de e-mail. Este scurt și dulce, se trimite lunar la peste 1.000 de abonați.

Lasă un răspuns

Adresa ta de email nu va fi publicată.