Сообщение об ошибке указывает, что у базы данных нет прав доступа к файлу /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.
Дополнительное чтение: