sql >> Database >  >> RDS >> PostgreSQL

Gecomprimeerd CSV-bestand importeren in PostgreSQL

Er is een oude truc om een ​​named pipe te gebruiken (werkt op Unix, weet niets van Windows)

  • maak een named pipe:mkfifo /tmp/omyfifo
  • schrijf de bestandsinhoud erin:zcat mycsv.csv.z > /tmp/omyfifo &
  • [van psql] copy mytable(col1,...) from '/tmp/omyfifo'
  • [wanneer klaar] :rm /tmp/omyfifo

De zcat in de achtergrondkleur blokkeert totdat een lezer (hier:de COPY command) begint met lezen en eindigt bij EOF. (of als de lezer de pijp sluit)

Je zou zelfs meerdere pijpen+zcat-paren kunnen starten, die worden opgepikt door meerdere COPY instructies in uw sql-script.

Dit werkt vanuit pgadmin, maar de fifo (+zcat-proces) moet aanwezig zijn op de machine waarop de DBMS-server draait.

Tussen haakjes:een soortgelijke truc met netcat kan worden gebruikt om een ​​bestand van een externe machine te lezen (die het bestand natuurlijk naar de netwerksocket zou moeten schrijven)



  1. PostgreSQL schakelt meer uitvoer uit

  2. Retourneer de huidige aanmeldingsnaam in SQL Server (T-SQL)

  3. TODATETIMEOFFSET() Voorbeelden in SQL Server

  4. HOUR() Voorbeelden – MySQL