Команда PostgreSQL COPY с CSV-файлом - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть CSV-файл с двумя столбцами: productId, productName.
Моя таблица содержит следующие столбцы: productId, productName, productprice.

Я хочучтобы иметь возможность скопировать этот файл в таблицу Postgres с помощью команды COPY и одновременно установить значение для третьего столбца: Productprice.

productPrice одинаково для всех строк.Я использую:

COPY product_master(productId, productName)
FROM 'product.txt' DELIMITERS ',' CSV; 

Я хочу прикрепить цену ко всем строкам.

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

Оставшийся столбец будет заполнен по умолчанию, как указано в руководстве :

Если в таблице есть столбцы, которых нет в списке столбцовCOPY FROM вставит значения по умолчанию для этих столбцов.

Таким образом, если цена одинакова для всех строк, создайте столбец по умолчанию.Затем удалите его, если он вам больше не нужен.

ALTER TABLE product_master ALTER COLUMN productrice SET DEFAULT 12.5;
COPY ...
ALTER TABLE product_master ALTER COLUMN productrice DROP DEFAULT;
0 голосов
/ 14 ноября 2011

Это скорее высокоуровневое решение для импорта данных, так как это ваш вопрос.

Есть несколько способов сделать это, но я обычно всегда использую промежуточную таблицу при перемещении данных в базу данных.система.Например, product_master_stg, который может быть очень универсальным, например, для типов столбцов могут быть заданы текстовые и нулевые значения, или вы можете получить более конкретные значения и сопоставить типы данных с ожидаемыми типами столбцов файлов.После использования функции копирования для ввода данных в промежуточную стадию я пишу сохраненную функцию для извлечения данных из промежуточной таблицы, их преобразования и загрузки в целевую таблицу, и в этот момент вы можете рассчитать стоимость продукта.Это хорошо согласуется с изменяющимися требованиями, основным недостатком является вызов хранимой функции, чтобы получить ее к финальной таблице, но все связано с определенными затратами, поэтому не считайте это плохой.Если вы будете постоянно следовать этому подходу, он будет хорошо масштабироваться, и его очень логично использовать и поддерживать.

...