Вам нужно материализовать столбцы, которые вы хотите в гибкой таблице. Поэтому при запуске команды COPY
будут загружены только те значения, которые соответствуют правильным типам данных.
Предположим, ваши данные выглядят так:
col1,col2,col3,col4,col4
1.2,2019-07-01 10:00:00,1,string 2
1.2,2019-07-01 10:00:00,string 1,string 2
И вас волнует только col1, col2, col3. Где col3 содержит смешанные значения типа int и string.
Создайте гибкую таблицу и загрузите CSV:
CREATE FLEX TABLE flex_table
(
col1 float,
col2 timestamp,
col3 int
);
COPY public.flex_table FROM '/data/csv/data_june7_15.csv' PARSER fcsvparser();
Затем вы можете вставить данные в свою обычную таблицу из своей гибкой таблицы (нет необходимости в представлении):
CREATE TABLE regular_table
(
col1 float,
col2 timestamp,
col3 int
);
INSERT INTO regular_table (col1, col2, col3) SELECT col1, col2, col3 FROM flex_table;
SELECT * FROM regular_table;
col1 | col2 | col3
------+---------------------+------
1.2 | 2019-07-01 10:00:00 |
1.2 | 2019-07-01 10:00:00 | 1