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

COPIA POSTGRES DAL PROGRAMMA in una tabella dinamica con colonne sconosciute

Dal momento che non conosci il numero/i tipi di righe in anticipo, ti suggerirei di fare in questo modo:

  • (1) importa il tuo CSV in una tabella (temporanea?) con una singola colonna di testo senza dividere. Usa backspace carattere come delimitatore in modo che l'intera riga importata rimanga intatta;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
  • (2) esegue una query che divide il CSV in un array di testo - funzione parse_csv , quindi utilizza il set risultante di array di testo come pertinente (magari mappa/inserisci nella tabella di destinazione "reale")
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;

Puoi aggiungere un WHERE clausola nel secondo SELECT istruzione per filtrare le righe in entrata, se necessario.

Un'altra opzione - a mio avviso molto valido - è usare l'eccellente file_textarray_fdw più o meno lo stesso effetto.

Spero che questo ti dia idee e aiuti.