sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL CSV-import från kommandoraden

Lösningen i det accepterade svaret kommer bara att fungera på servern och när användaren som kör frågan har behörighet att läsa filen som förklaras i detta SO-svar.

Annars är ett mer flexibelt tillvägagångssätt att ersätta SQL:s COPY kommandot med psql s "meta-kommando" som heter \copy som tar alla samma alternativ som den "riktiga" COPY, men körs inuti klienten (utan behov av ; i slutet):

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

Enligt dokument, \copy kommando:

Utför en frontend (klient) kopia. Detta är en operation som kör ett SQL COPY-kommando, men istället för att servern läser eller skriver den angivna filen, läser eller skriver psql filen och dirigerar data mellan servern och det lokala filsystemet. Detta betyder att filtillgänglighet och privilegier är de för den lokala användaren, inte servern, och inga SQL-superanvändarbehörigheter krävs.

Dessutom, om the_file.csv innehåller rubriken på den första raden, den kan kännas igen genom att lägga till header i slutet av ovanstående kommando:

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"


  1. Vi presenterar uppspelning – ny tidpunktsdiagnos för Spotlight Cloud

  2. Hur lägger jag till index i MySQL-tabeller?

  3. Prisma, hur man vänder ordningen

  4. Spelar ordningen på kolumner i en WHERE-sats någon roll?