PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

POSTGRES COPY FROM PROGRAM em uma tabela dinâmica com colunas desconhecidas


Como você não sabe o número/tipos de linhas antecipadamente, sugiro que faça assim:
  • (1) importe seu CSV para uma tabela (temporária?) com uma única coluna de texto sem divisão. Use backspace caractere como delimitador para que toda a linha importada permaneça intacta;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
  • (2) execute uma consulta que divide o CSV em uma matriz de texto - função parse_csv e, em seguida, use o conjunto resultante de matrizes de texto conforme relevante (talvez mapeie/insira na tabela de destino 'real')
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;

Você pode adicionar um WHERE cláusula no segundo SELECT instrução para filtrar as linhas de entrada, se necessário.

Outra opção - um muito bom no meu entendimento - é usar o excelente file_textarray_fdw para mais ou menos o mesmo efeito.

Espero que isso lhe dê idéias e ajuda.