我正在运行Manjaro Linux,并试图学习如何使用PostgresSQL。我已经安装了Postgres according to the wiki,也通过pacman安装了pgAdmin4。我已经使用pgAdmin4 GUI设置了服务器和数据库,并开始进行基本的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?
您应该能够通过运行以下命令从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以从新位置复制。
错误消息表明数据库无权访问文件/home/rob/Code/temp/birdsong.csv
。您需要向数据库用户授予访问权限-通常称为postgres
。检查如何在您的操作系统中执行此操作,例如在Linux中单击chown
,然后尝试再次使用COPY。
chown
如果没有必要的权限向系统中的用户 COPY birdsong (english_name, country, latitude, longitude)
FROM '/home/rob/Code/temp/birdsong.csv' DELIMITER ',' CSV HEADER;
授予访问权限,则可以通过postgres
使用STDIN
的COPY
工具:
psql
如果您计划使用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);
数字4326代表SRS geom
-最常用的SRS。
进一步阅读:
UPDATE birdsong SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
WGS84