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.


Ответы (0 шт):