Jag är ganska säker på att alla av oss har varit i en situation där vi behövt generera en rapport och/eller extrahera data från en databas och presentera den i ett kalkylblad. I många fall föredrar våra kunder Excel för att hantera utbredningsblad/rapporter, eftersom det är Excel.

Så, hur närmar man sig det här problemet? Kopierar ni data och klistrar in dem? Eller använder du ett GUI för RDBMS för att generera rapporten till ett kalkylblad? Idag ska jag visa dig en liten men praktisk funktion i PostgreSQL -COPY.

Hej COPY#

Från COPY-dokumentationen: ”COPY flyttar data mellan PostgreSQL-tabeller och standardfilesystemfiler. COPY TO kopierar innehållet i en tabell till en fil, medanCOPY FROM kopierar data från en fil till en tabell (genom att lägga till data till det som redan finns i tabellen). COPY TO kan också kopiera resultaten av en SELECT-fråga.”

Så, vad gör COPY:

  1. Det kan kopiera innehållet i en fil (data) till en tabell, eller
  2. Det kan kopiera innehållet i en tabell (eller ett resultat av en SELECT-fråga) till en fil.

Om en lista med kolumner anges kopierar COPY endast data i de angivna kolumnerna till eller från filen. Om det finns kolumner i tabellen som inte finns med i kolumnlistan kommer COPY FROM att infoga standardvärdena för dessa kolumner.

COPY med ett filnamn instruerar PostgreSQL-servern att direkt läsa från eller skriva till en fil. Filen måste vara tillgänglig för servern och namnet måste anges från serverns synvinkel. När STDIN eller STDOUT anges överförs data via anslutningen mellan klienten och servern.

Låter det bra? Låt oss prova!

Disclaimer: COPY har möjlighet att läsa/skriva data från/till CSV- och binära filer. Även om jag är säker på att det finns många användningsområden för binära filer kommer jag i det här blogginlägget endast att fokusera på att använda den för CSV-filer eftersom de för mig personligen är de mest bekväma för att hantera datamängder.

COPY TO#

När du vill skapa en CSV-fil av en SELECT-fråga eller dumpa allt innehåll i en tabell i en CSV-fil kan du använda kommandot ”COPY … TO …”.

Användning av en SELECT-fråga#

När du vill kopiera en resultatuppsättning till en CSV-fil är formatet för COPY-kommandot:

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

Och, ett mer verkligt exempel:

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

Som du ser använder vi kommandot COPY som kopierar resultaten till en CSV-fil i det lokala filsystemet. Du kan ta frågan mycket längre än så. Här är ett exempel på ett projekt som jag för närvarande arbetar med:

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 ser kan du använda vilken SELECT-fråga som helst som kan returnera en dataresultatuppsättning.Men vad är en CSV utan rubriker, eller hur? 🙂

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

Om du lägger till nyckelordet HEADER i slutet kommer du att inkludera rubriker i CSV-filen, vilket är tabellens kolumnnamn.

En annan viktig funktion i CSV-filer är avgränsare. Beroende på vilket tecken du vill att CSV-filen ska ha som avgränsare kan du ange tecknet i kommandot:

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

Användning av ett tabellnamn#

När du vill att en hel tabell ska dumpas i en CSV är kommandot mycket enklare. Du behöver bara ange tabellens namn och målfilen:

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

Det är allt.

COPY FROM#

Nu kan du använda kommandot ”COPY &mldr; FROM &mldr;” när du vill lägga in data från CSV-filen i en tabell. Syntaxen är mycket likadan, med endast en nyckelskillnad:

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

Och, med hjälp av ett exempel från det verkliga livet:

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

Outro#

COPY är en riktigt bra funktion i Postgres. För att få en bra känsla för det här har jag försökt att hålla det här blogginlägget kort och enkelt. Om du har några tankar och frågor får du gärna lämna en kommentar till mig. Eller om du inte känner dig pratsam kan du gå över till COPYdocumentation.

Gillade du den här artikeln? Prenumerera på mitt nyhetsbrev och få mina färska inlägg i din inkorg. Det är kort och gott och går ut varje månad till över 1 000 prenumeranter.

Lämna ett svar

Din e-postadress kommer inte publiceras.