Postgresql - как загрузить данные в таблицу из текстового файла, в Sql-запросе?
Загрузка нужно именно из текстового файла или *.csv, но только через sql запрос, без tools вроде pgql и других.
При этом, чтобы работали относительные пути (путь до файла источника можно было указывать от корня, где находится sql файл.)
Можно ли это оформить в виде процедуры или функции, так как заполнение тестовыми данными, сгенерированными из случайных символов, не очень читаемо, а если нужно загрузить несколько сотен пользователей с читаемыми именами и другими данными, то скрипт наполнения писать очень неудобно.
Есть вариант использовать Liquibase (loadData), но его нужно поднимать и настраивать для работы. Хотелось бы более простой способ, если конечно он есть.
CREATE TABLE weather
(
city varchar(80),
temp_lo int, -- низкая температура --
temp_hi int, -- высокая температура --
prcp real, -- количество осадков --
date date
);
COPY weather FROM './weather.txt';
weather.txt
'San Francisco', 43, 57, 0.0, '1994-11-29'
'London', 45, 56, 0.1, '1994-11-30'
'Berlin', 35, 46, 0.2, '1994-11-15'
Этот вариант не работает.
Файлы, указанные в команде COPY, читаются или записываются непосредственно сервером, не клиентским приложением. Поэтому они должны располагаться на сервере или быть доступными серверу, а не клиенту. Они должны быть доступны на чтение или запись пользователю PostgreSQL (пользователю, от имени которого работает сервер), не клиенту. Аналогично, команда, указанная параметром PROGRAM, выполняется непосредственно сервером, а не клиентским приложением, и должна быть доступна на выполнение пользователю PostgreSQL. Выполнять команду COPY с файлом (или командой) разрешено только суперпользователям базы данных, так как она позволяет прочитать и записать любой файл, к которому имеет доступ сервер.
Хорошо, чтобы решение работало как в Windows среде, так и в Ubuntu.