写作:使用 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吗? @dinesh COPY (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 两种表复制语句区别

copy_from_user 是不是修改用户指针?

mysql update select 用法

使用带有 psycopg2 的二进制 COPY 表 FROM

copy_from_user的疑问

copy_{to, from}_user()的思考