:: Не фоксом единым
Загрузить данные в таблицу POSTgreSQL из CSV
tata
Автор

Сообщений: 3458
Откуда: Казань
Дата регистрации: 23.10.2005
Всем привет!
Я автоматизирую работу по загрузке данных из CSV в таблицу POSTGreSQL.
Все работает, только импортировать данные приходится вручную.
Мне это не нравится, но пока решения я не нашла.
Мне нужно загружать данные SQL-скриптом (обязательно).
Файл CSV находится на локальном компе (моем).

Пробовала так:

COPY skpdi.skpdiobj
FROM 'c:\loadobj.csv'
DELIMITER ‘;’
CSV HEADER;

LOAD DATA INFILE "c:\csv\loadobj.csv"
INTO TABLE skpdiobj
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
Ну никак...


Создать таблицу:
create table skpdi.skpdiobj (
objname varchar(128),
omsu_ID int8,
municipality varchar(50),
municipalityid uuid,
address varchar(128),
startdate varchar(50),
enddate varchar(50),
factstartdate varchar(50),
factdate varchar(50),
link varchar(128),
skpdiid int8,
typename varchar(50),
type int8,
skpdistate int8,
statetext varchar(100),
state varchar(50),
istfin varchar(50),
idistfin int8,
objectid uuid default public.newid())

Тестовые данные в приложенном файле.



Исправлено 2 раз(а). Последнее : tata, 05.07.22 13:37
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
tata

COPY skpdi.skpdiobj
FROM 'c:\loadobj.csv'
DELIMITER ‘;’
CSV HEADER;

1. COPY выполняет сервер, поэтому про путь на твоем локальном диске он ничего не знает.\

С клиента работает команда \copy (со слэшом)

stackoverflow-com.translate.goog

2. Права от имени которого выполняется COPY должны быть либо root, либо Админ.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
tata
Автор

Сообщений: 3458
Откуда: Казань
Дата регистрации: 23.10.2005
PaulWist
tata

COPY skpdi.skpdiobj
FROM 'c:\loadobj.csv'
DELIMITER ‘;’
CSV HEADER;

1. COPY выполняет сервер, поэтому про путь на твоем локальном диске он ничего не знает.\

С клиента работает команда \copy (со слэшом)

stackoverflow-com.translate.goog


SQL Error [42601]: ERROR: syntax error at or near "\"
Позиция: 1

Не понимает в скрипте \copy
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Ну, расшарь папку на своём компе, дай права everyone и запусти COPY \МоярасшареннаяПапка\МойФайл


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
tata
Автор

Сообщений: 3458
Откуда: Казань
Дата регистрации: 23.10.2005
copy skpdi.skpdiobj from 'c:\csv\loadobj.csv' DELIMITER ';' CSV HEADER;

SQL Error [58P01]: ERROR: could not open file "c:\csv\loadobj.csv" for reading: No such file or directory
Подсказка: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql's \copy.

Файл есть, владелец файла я.

При попытке дать команду
\copy skpdi.skpdiobj from 'c:\csv\loadobj.csv' DELIMITER ';' CSV HEADER;

SQL Error [42601]: ERROR: syntax error at or near "\"
Позиция: 1
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
create table test1 (id int, name varchar(100) )
insert into test1 values (1, '11111'), (2, '2222'), (3, '33333')
select * from test1
create table test2 (id int, name varchar(100) )
insert into test2 (id, name)
select
test1.id*10,
' select' + (select name from test1 where id = 2) as name
from test1
where test1.id in (1, 3)
select * from test2
drop table test1;
drop table test2;


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
Burn

Сообщений: 5640
Откуда: Днепр
Дата регистрации: 02.01.2002
Конечно не в POSTGreSQL но копировал данные в расшаренную папку на сервере и уже оттуда экспортировал данные
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
ВладимирС

Сообщений: 1693
Дата регистрации: 03.11.2005
Мне тоже кажется лучше экспортировать файлы на сервер в конкретную папку.

Ну а затем типа:
COPY persons(first_name, last_name, dob, email)
FROM '/sampledb/persons.csv'
DELIMITER ';'
CSV HEADER;



Исправлено 1 раз(а). Последнее : ВладимирС, 08.07.22 11:55
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
tata
Автор

Сообщений: 3458
Откуда: Казань
Дата регистрации: 23.10.2005
получилось так в итоге:
COPY skpdi.skpdiobj5 FROM '/exchange/loadobj.csv' DELIMITER ';' CSV HEADER;



(папка расшарена на сервере).
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Так у тебя сервер под Линуксом


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Загрузить данные в таблицу POSTgreSQL из CSV
tata
Автор

Сообщений: 3458
Откуда: Казань
Дата регистрации: 23.10.2005
PaulWist
Так у тебя сервер под Линуксом
ага.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 13 (Гостей: 13)

© 2000-2024 Fox Club 
Яндекс.Метрика