sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL CSV importeren vanaf de opdrachtregel

De oplossing in het geaccepteerde antwoord werkt alleen op de server en wanneer de gebruiker die de query uitvoert, toestemming heeft om het bestand te lezen, zoals uitgelegd in dit SO-antwoord.

Anders is het een flexibelere benadering om de COPY . van de SQL te vervangen commando met de psql 's "meta-commando" genaamd \copy die dezelfde opties heeft als de "echte" COPY, maar wordt uitgevoerd in de client (zonder dat ; nodig is aan het einde):

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

Volgens documenten, de \copy commando:

Voert een frontend (client) kopie uit. Dit is een bewerking die een SQL COPY-opdracht uitvoert, maar in plaats van dat de server het opgegeven bestand leest of schrijft, leest of schrijft psql het bestand en routeert de gegevens tussen de server en het lokale bestandssysteem. Dit betekent dat de toegankelijkheid en privileges van bestanden die van de lokale gebruiker zijn, niet van de server, en er zijn geen SQL-superuser-privileges vereist.

Bovendien, als de the_file.csv bevat de header in de eerste regel, deze kan worden herkend door header toe te voegen aan het einde van het bovenstaande commando:

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


  1. ODBC gebruiken met Salesforce en OneLogin Single Sign On (SSO)

  2. @@ROWCOUNT – Verkrijg het aantal rijen dat wordt beïnvloed door de laatste instructie in SQL Server

  3. Help bij MySQL-updatecase

  4. Hoe kan ik MySQL Errcode 13 omzeilen met SELECT INTO OUTFILE?