Jeg er ret sikker på, at vi alle har været i en situation, hvor vi har haft brug for at generere en rapport og/eller udtrække nogle data fra en database og præsentere dem i et regneark. I mange tilfælde foretrækker vores kunder Excel til at håndtere spreadsheets/rapporter, fordi, duh, det er Excel.

Så, hvordan griber du dette problem an? Kopierer du data og indsætter dem? Eller bruger du enRDBMS GUI til at generere rapporten til et regneark? I dag vil jeg vise dig en virkelig lille, men praktisk funktion i PostgreSQL -COPY.

Hej COPY#

Fra COPY-dokumentationen: “COPY flytter data mellem PostgreSQL tabeller og standard filsystem filer. COPY TO kopierer indholdet af en tabel til en fil, mensCOPY FROM kopierer data fra en fil til en tabel (ved at tilføje dataene til det, der allerede er i tabellen). COPY TO kan også kopiere resultaterne af en SELECT forespørgsel.”

Så, hvad gør COPY:

  1. Den kan kopiere indholdet af en fil (data) til en tabel, eller
  2. Den kan kopiere indholdet af en tabel (eller et SELECT forespørgselsresultat) til en fil.

Hvis der er angivet en liste over kolonner, vil COPY kun kopiere dataene i de angivne kolonner til eller fra filen. Hvis der er kolonner i tabellen, som ikke er på kolonnelisten, vil COPY FROM indsætte standardværdierne for disse kolonner.

COPY med et filnavn instruerer PostgreSQL-serveren om at læse direkte fra eller skrive til en fil. Filen skal være tilgængelig for serveren, og navnet skal være angivet fra serverens synspunkt. Når STDIN eller STDOUT er specificeret, overføres data via forbindelsen mellem klienten og serveren.

Lyder det godt? Lad os prøve det!

Disclaimer: COPY har mulighed for at læse/skrive data fra/til CSV- og binære filer. Selv om jeg er sikker på, at der er mange anvendelsesmuligheder for binære filer, vil jeg i dette blogindlæg kun fokusere på at bruge det til CSV-filer, fordi de for mig personligt er de mest bekvemme til håndtering af datasæt.

COPY TO#

Når du vil oprette en CSV-fil ud fra en SELECT-forespørgsel eller dumpe alt indholdet af en tabel i en CSV-fil, kan du bruge kommandoen “COPY … TO …”.

Ved brug af en SELECT-forespørgsel#

Når du vil kopiere et resultatsæt til en CSV-fil, er formatet for COPYkommandoen:

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

Og et mere virkelighedsnært eksempel:

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

Som du kan se, bruger vi kommandoen COPY, som kopierer resultaterne til en CSV-fil på det lokale filsystem. Du kan tage forespørgslen meget længere. Her er areal life eksempel på et projekt, som jeg arbejder på i øjeblikket:

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;

Som du kan se, kan du bruge enhver SELECT forespørgsel, der kan vil returnere et dataresultat sæt.Men, hvad er en CSV uden headers, ikke sandt? 🙂

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

Hvis du tilføjer nøgleordet HEADER i slutningen, vil du inkludere overskrifter i CSV-filen,som er tabellens kolonnetavler.

Et andet vigtigt træk ved CSV-filer er også afgrænsningselementerne. Afhængigt af hvilket afgrænsningstegn du ønsker, at CSV-filen skal have, kan du angive tegnet i kommandoen:

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

Anvendelse af et tabelnavn#

Når du vil have en hel tabel dumpet ind i en CSV, er kommandoen virkeligenklere. Du skal blot angive tabellens navn og målfilen:

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

Det er det hele.

COPY FROM#

Nu, når du vil injicere dataene fra CSV-filen i en tabel, kan du bruge kommandoen “COPY &mldr; FROM &mldr;”. Syntaksen er meget simillar, med kun en enkeltnøgleforskel:

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

Og, ved hjælp af et eksempel fra det virkelige liv:

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

Outro#

COPY er en rigtig smart og fed funktion i Postgres. Af hensyn til brewity har jeg forsøgt at holde dette blogindlæg kort og enkelt. Hvis du har nogen tanker og spørgsmålføler du dig velkommen til at smide mig en kommentar. Eller, hvis du ikke har lyst til at snakke, kan du gå over til COPYdocumentation.

Kunne du lide denne artikel? Tilmeld dig mit nyhedsbrev og få mine friske indlæg i din indbakke. Det er kort og godt og går ud hver måned til over 1.000 abonnenter.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.