I've done this before using dynamic schema. Basically you query the target metadata to get a set of columns, and the incoming file to get a set of columns and do a set difference to get the new columns from the source, from there you can use the common columns to load to tgt.
You may also be able to use POSTGRES' ON CONFLICT IGNORE functionality, but I've never tested this use case