sql >> Database teknologi >  >> RDS >> PostgreSQL

POSTGRES KOPIER FRA PROGRAM til en dynamisk tabel med ukendte kolonner

Da du ikke kender antallet/typer af rækker på forhånd, vil jeg foreslå, at du gør sådan her:

  • (1) importer din CSV til en (midlertidig?) tabel med en enkelt tekstkolonne uden opdeling. Brug backspace tegn som afgrænsning, så hele den importerede linje forbliver 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 forespørgsel, der opdeler CSV'en i et tekstarray - funktion parse_csv , og brug derefter det resulterende sæt af tekstarrays som relevant (måske kortlægge/indsætte i den 'rigtige' måltabel)
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 tilføje en WHERE klausul i den anden SELECT sætning for at filtrere indgående rækker, hvis det er nødvendigt.

En anden mulighed - en meget god i min forståelse - er at bruge den fremragende file_textarray_fdw til mere eller mindre samme effekt.

Håber, at dette giver dig ideer og hjælp.




  1. Sådan ekko udskriftserklæringer, mens du udfører et sql-script

  2. Sådan slipper du hurtigt en bruger med eksisterende privilegier

  3. Sådan analyseres aktiviteten af ​​en database i SQL Server

  4. MySQL "NOT IN" forespørgsel 3 tabeller