sql >> Databasteknik >  >> RDS >> PostgreSQL

POSTGRES KOPIERA FRÅN PROGRAMMET till en dynamisk tabell med okända kolumner

Eftersom du inte känner till antalet/typerna av rader i förväg skulle jag föreslå att du gör så här:

  • (1) importera din CSV till en (tillfällig?) tabell med en enda textkolumn utan att dela. Använd backspace tecken som avgränsare så att hela den importerade raden förblir intakt;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
  • (2) kör en fråga som delar upp CSV-filen i en textmatris - funktion parse_csv , och använd sedan den resulterande uppsättningen textmatriser som relevant (kanske mappa/infoga i den "riktiga" måltabellen)
WITH rawdata AS
(
 SELECT parse_csv(rawtext) arr FROM rawtext_t
) 
INSERT INTO real_t (...fields...) 
SELECT arr[1], arr[3], ...
FROM rawdata;

TRUNCATE TABLE rawtext_t;

Du kan lägga till en WHERE sats i den andra SELECT uttalande för att filtrera inkommande rader vid behov.

Ett annat alternativ - enligt min uppfattning mycket bra - är att använda den utmärkta file_textarray_fdw till mer eller mindre samma effekt.

Hoppas att detta ger dig idéer och hjälp.




  1. Hur man sammanfogar strängar i SQL Server med CONCAT()

  2. Oracle-syntax – ska vi behöva välja mellan det gamla och det nya?

  3. Hur man hittar mysql-datakatalogen från kommandoraden i Windows

  4. Installera MariaDB 10.1 i Debian Jessie och köra olika MariaDB-frågor