当我执行以下脚本时:

copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4
from patient_agk_p_expr
where  status_agk_p_k4='Preferentially')
to 'g:\boom.csv'
With CSV HEADER;

它工作得很好,在我的g驱动器上创建了boom.csv文件。
我得到:
Query returned successfully: 8486 rows affected, 631 ms execution time.

我应该注意我的“g”驱动器是一个连接到我的计算机的外部硬盘驱动器。
我的cygwin指的是我的g硬盘如下:
blumr04@SRB524YBZ1 /cygdrive/g/
$ pwd
/cygdrive/g

现在,我的计算机也可以访问我所在组织的服务器硬盘。
在我的windows资源管理器中,它引用为(Z:)
我的cygwin相应地指的是'Z'驱动器(与C:drive相同):
blumr04@SRB524YBZ1 /cygdrive/z/
$ pwd
/cygdrive/z

但是当让postgres识别这个硬盘驱动器时,我遇到了一些麻烦——当我试图运行以下脚本以便将表保存到Z硬盘驱动器时:
copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4
from patient_agk_p_expr
where  status_agk_p_k4='Preferentially')
to 'z:\boom.csv'
With CSV HEADER;

我收到以下错误消息:
ERROR:  could not open file "z:\boom.csv" for writing: No such file or directory
********** Error **********

ERROR: could not open file "z:\boom.csv" for writing: No such file or directory
SQL state: 58P01

有没有人知道当我的硬盘不是物理连接到我的计算机,而是服务器硬盘时,我如何保存(复制到)我的文件?
-postgres中是否有一个命令/脚本可以显示postgres可以访问哪些硬盘?看起来出于某种原因Z硬盘不适合postgres读/写,至少不像我尝试的那样,而G、J、K和其他外部HD硬盘是可访问的。我很高兴知道我是否能以某种方式扩展postgres的可访问性。。
谢谢!
@迈克·谢里尔“猫召回”
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我的Z驱动器在Windows资源管理器中也称为:
(\shares.nyumc.org\research)(Z:),
因此,我也尝试了以下几点:
copy (
select agk_p_id Promoter_agk, multiplication_lr_agk_p_k4, agk_lr_rvd, status_agk_p_k4
from patient_agk_p_expr
where  status_agk_p_k4='Preferentially')
to '\\shares.nyumc.org\research\boom.csv'
With CSV HEADER;

这些脚本给了我以下错误,实际上是关于权限的错误:
ERROR:  could not open file "\\shares.nyumc.org\research\boom.csv" for writing: Permission denied
********** Error **********

ERROR: could not open file "\\shares.nyumc.org\research\boom.csv" for writing: Permission denied
SQL state: 42501

所以看起来正确的路径是:
\\shares.nyumc.org\research\

在这种情况下(Z:)只是一个别名(?)?!)因为这次的错误信息不是关于“没有这样的文件或目录”,而是关于权限。
有什么方法可以帮助我获得必要的Postgres权限,以便它可以写入服务器驱动器?

最佳答案

运行COPY tablename to filename最常见的问题是从PostgreSQL服务器的角度处理路径和权限。
在COPY命令中命名的文件由
服务器,而不是客户端应用程序。因此,他们必须住在
或者可以访问数据库服务器计算机,而不是客户端。他们
必须是PostgreSQL用户可访问、可读或可写的
(服务器运行时的用户ID),而不是客户端。Source
如果你试图写入一个PostgreSQL服务器看不到的文件,你将得到“没有这样的文件或目录”。如果您试图写入PostgreSQL服务器没有权限的目录中的文件,您将获得“拒绝权限”。
因此,PostgreSQL用户(服务器运行时的用户ID)缺少“z”权限的可能性很大。

关于postgresql - postgres-将输出保存到服务器硬盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27994300/

10-15 21:42