写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER" 在 postgr
Posted
技术标签:
【中文标题】写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER \',\' CSV HEADER" 在 postgres 中拒绝权限;【英文标题】:for writing: Permission denied in postgres using COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER";写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER" 在 postgres 中拒绝权限; 【发布时间】:2014-10-04 04:01:01 【问题描述】:我的要求是从 postgres 表数据中写入 csv,然后我面临以下问题,请提供一些解决此问题的提示。
org.postgresql.util.PSQLException: ERROR: could not open file
当我使用这个查询时
COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER";
【问题讨论】:
你读过fine COPY manual吗? @dineshCOPY (SELECT * from mytable) To 'C:\csvfilename.csv' DELIMITER ',' CSV HEADER";
将write
权限授予postgres
用户
【参考方案1】:
您似乎正在使用 PgJDBC。
您很可能希望使用从PGConnection
获得的the CopyManager
到/从Java 客户端到COPY
。请参阅 this example 和 PgJDBC API docs。
如果您打算对服务器文件系统执行COPY
或从服务器文件系统执行COPY
,则必须分配适当的文件系统权限,以便PostgreSQL 服务器运行的用户(通常为postgres
)可以读取/写入所需的位置。
【讨论】:
【参考方案2】:将文件保存在每个用户可以保存的地方。在这种情况下,用户 postgres。
Copy (Select * From tablename To '/tmp/file.csv' With CSV DELIMITER ',';
【讨论】:
以上是关于写作:使用 COPY (SELECT * from <table>) To <filename> DELIMITER ',' CSV HEADER" 在 postgr的主要内容,如果未能解决你的问题,请参考以下文章
oracle数据库表复制insert into select from跟create table as select * from 两种表复制语句区别