I need to run the following statement in PL/pgSQL.
x
if file_record.has_recieved_time_column then
EXECUTE FORMAT('COPY mytemp (columnA, columnB, columnC)
FROM %L
DELIMITER '',''
CSV HEADER;', file_record.file_path);
elseif file_record.has_header then
-- dont load columnC
EXECUTE FORMAT('COPY mytemp (columnA, columnB)
FROM %L
DELIMITER '',''
CSV HEADER;', file_record.file_path);
else
-- dont load columnC and the file has no header
EXECUTE FORMAT('COPY mytemp (columnA, columnB)
FROM %L
DELIMITER '',''
CSV;', file_record.file_path);
end if;
How can I avoid repeating repeating myself in this code?
Advertisement
Answer
Try creating variable cols
with default values columnA,columnB
and then contatenate it with columnC
in case you need it, e.g.
cols := 'columnA, columnB';
IF file_record.has_recieved_time_column THEN
cols = cols || ',columnC';
ELSEIF file_record.has_header THEN
cols = cols || ',columnX';
ELSE
.
END IF;
EXECUTE FORMAT('COPY mytemp (%L) FROM %L DELIMITER '',''CSV HEADER;', cols, file_record.file_path);