Postgres的:我想要一个表复制到它显示了一个文件“权限被拒绝”

问题描述:

我喜欢一个表复制到文件我的PostgreSQLPostgres的:我想要一个表复制到它显示了一个文件“权限被拒绝”

我尝试这个查询

COPY demo TO '/home/rck/Desktop/trial.csv' 

但显示权限被拒绝

我也试过\副本,但它显示了语法错误

\COPY demo TO '/home/rck/Desktop/trial.csv' 

的错误是

:\ “ LINE 1”ERROR处或附近语法错误“:\ COPY演示TO“/home/rck/Desktop/trial.csv

我还试图在终端

此命令
chmod a+rX /home/rck/ /home/rck/desktop /users/rck/desktop/trial.csv 

但它仍然显示相同的错误。

我可以知道如何将postgres表复制到文件的解决方案吗?

感谢

+0

你你确定你使用-u和-d标志从psql运行了这些命令,并以授予所需权限的用户身份进行连接。 \ copy命令应该可以工作。 – Murphy4

+0

我是新来的postgresql。我怎样才能做到这一点?我也是postgresql的超级用户 –

COPY demo TO '/home/rck/Desktop/trial.csv'是服务器端的命令 - 应该运行作为超级用户权限的用户postgres被设置在服务器端。

\COPY demo TO '/home/rck/Desktop/trial.csv'是客户端psql命令 - 不能从pgAdmin左右运行...并相应的文件路径权限应被授予运行psql用,而不是Postgres的用户...

您将要运行以下命令。我建议将它们放到一个* .sql文件中,并将其保存在项目的某个位置以供参考。改变你的喜好。假设,虽然你已经创建了一个数据库,它里面的表格演示,你需要的命令是:

create user <demouser> with password '<password>'; 
grant all privileges on database demo_db to <demouser>; 

就可以启动Postgres的用psql的命令。根据您的操作系统,这些会稍微改变。对于Windows有一个-u命令来设置用户,但在Linux上使用sudo的完成:

sudo -u <superusername> psql -d <demo_db>; 

:如果你使用的是默认的Postgres可能是保存你的表演示数据库。

然后,这个命令后,你应该看到提示

demouser=# 

所以再运行

\copy demo to 'filename'; 
+0

感谢您的回复,它的效果很好。我在ubuntu的终端里执行这个命令。这可能像在查询中一样在postgres或pgadmin3中执行,因为我想将其设置为触发器。这是可能的吗? –

+0

它可以像使用COPY命令作为触发器一样完成。但是从文档中, 不要混淆COPY和psql指令\ copy。 \ copy从STDIN复制或复制到STDOUT,然后将数据提取/存储在psql客户端可访问的文件中。因此,使用\ copy时,文件可访问性和访问权限取决于客户端而不是服务器。 所以你需要配置COPY命令。虽然我没有测试过它,但我相信可以像触发其他触发器一样在触发器函数中使用COPY命令。 – Murphy4