PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

POSTGRES КОПИРА ОТ ПРОГРАМА в динамична таблица с неизвестни колони

Тъй като не знаете предварително броя/видовете редове, бих ви предложил да направите така:

  • (1) импортирайте вашия CSV във (временна?) таблица с една текстова колона без разделяне. Използвайте backspace символ като разделител, така че целият импортиран ред да остане непокътнат;
CREATE TABLE IF NOT EXISTS rawtext_t (rawtext text);
COPY rawtext_t FROM <file_name> WITH (format 'csv', delimiter E'\b');
  • (2) изпълнете заявка, която разделя CSV файла в текстов масив - функция parse_csv , и след това използвайте получения набор от текстови масиви като подходящи (може би картографиране/вмъкване в „истинската“ целева таблица)
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;

Можете да добавите WHERE клауза във втория SELECT оператор, за да филтрирате входящите редове, ако е необходимо.

Друга опция - много добър според моите разбирания - е да използвате отличния file_textarray_fdw до повече или по-малко същия ефект.

Надяваме се, че това ви дава идеи и ви помага.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да настроя разширение на Postgres?

  2. Грешка във формата на датата в Postgresql

  3. Стойността на първичния ключ не се увеличава правилно

  4. Преглед на серийния псевдотип на данни за PostgreSQL

  5. Как да upsert в Postgres при конфликт на една от 2 колони?