Как мне скопировать CSV в pgadmin4 на Manjaro / Arch Linux? (Проблемы с разрешениями) - PullRequest
1 голос
/ 18 января 2020

Я бегу Манджаро Linux и пытаюсь научиться использовать PostgresSQL. Я установил Postgres в соответствии с вики , а также установил pgAdmin4 через pacman. Я настроил сервер и базу данных, используя pgAdmin4 GUI, и начал выполнять базовые c SQL запросы.

Я пытаюсь импортировать csv, который находится на моем диске в /home/rob/Code/temp/birdsong.csv. На панели инструментов запроса я создал таблицу пения птиц с

-- Drop table if exists
DROP TABLE IF EXISTS bird_song;

-- Create new table
CREATE TABLE birdsong (
    english_name VARCHAR,
    country VARCHAR,
    latitude DEC,
    longitude DEC
 );

 COPY birdsong (english_name, country, latitude, longitude)
 FROM '/home/rob/Code/temp/birdsong.csv' DELIMITER ',' CSV HEADER;

и получаю сообщение об ошибке ERROR: could not open file "/home/rob/Code/temp/birdsong.csv" for reading: Permission denied

Я нахожусь на PostgresSQL 12.1 и pgAdmin4 4,15. Между прочим, когда я запускаю pgAdmin4, он жалуется, что самая последняя версия - 4.17, но я еще не выяснил, можно ли / как это обновить.

Как настроить правильные настройки разрешений для чтения файлов в pgAdmin4?

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Сообщение об ошибке указывает, что у базы данных нет прав доступа к файлу /home/rob/Code/temp/birdsong.csv. Вам необходимо предоставить доступ пользователю базы данных - обычно он называется postgres. Проверьте, как это сделать в вашей операционной системе, например, chown в Linux и попробуйте снова использовать COPY.

 COPY birdsong (english_name, country, latitude, longitude)
 FROM '/home/rob/Code/temp/birdsong.csv' DELIMITER ',' CSV HEADER;

Если у вас нет необходимых разрешений для предоставления доступа пользователю postgres в вашей системе, вы можете использовать STDIN средство COPY через psql:

$ cat birdsong.csv | psql your_db -c "COPY birdsong (english_name, country, latitude, longitude) DELIMITER ',' CSV HEADER FROM STDIN;"

Этот подход также может быть полезен, если вы планируете использовать COPY для импорта файлов в удаленные базы данных.

Слегка несвязанная заметка

Я заметил, что вы импортируете значения longitude и latitude в свою таблицу в виде отдельных столбцов, что ради импорта данных просто отлично. Однако, если вы планируете выполнять пространственные операции с этими данными, я бы порекомендовал вам сохранить эти координаты в столбце geometry или geography. Вот как вы можете сделать это:

SELECT AddGeometryColumn ('public','birdsong','geom',4326,'POINT',2);

или

ALTER TABLE birdsong ADD COLUMN geom geometry(Point,4326);

.. и затем заполните столбец geom точкой

UPDATE birdsong SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);

Номер 4326 обозначает SRS WGS84 - наиболее часто используемый SRS.

Дополнительное чтение:

0 голосов
/ 18 января 2020

Вы должны иметь возможность разрешить доступ на чтение к файлу из службы pgadmin, выполнив следующее:

chmod o+rx /home/rob
chmod o+xr /home/rob/Code
chmod o+xr /home/rob/Code/temp
chmod o+r /home/rob/Code/temp/birdsong.csv

Будьте осторожны, хотя это может быть нежелательно. Другой вариант - скопировать файл в общую папку и добавить разрешение на чтение. Скажите

cp /home/rob/Code/temp/birdsong.csv /tmp
chmod o+r /tmp/birdsong.csv

... Затем измените SQL, чтобы скопировать из нового местоположения.

...