当我执行以下脚本时:
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;
它工作得很漂亮,并在我的驱动器上创建boom.csv文件。 我明白了:
Query returned successfully: 8486 rows affected, 631 ms execution time.
我应该注意到我的' drive是连接到我的计算机的外部硬盘。 我的cygwin指的是我的硬盘驱动器:
blumr04@SRB524YBZ1 /cygdrive/g/
$ pwd
/cygdrive/g
现在,我的计算机还可以访问我的组织的服务器硬盘。 在我的Windows资源管理器中,它指的是(Z:)
我的cygwin指的是' Z'相应的驱动(就像它对我的C:驱动器一样):
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可访问性..
谢谢!
@Mike Sherrill' Cat Recall'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的Z驱动器在Windows资源管理器中也称为: (\ shares.nyumc.org \研究)(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 :)只是一个别名(?!),因为错误消息不是关于"没有这样的文件或目录",而是关于权限。
答案 0 :(得分:1)
运行COPY tablename to filename
的最常见问题是从PostgreSQL服务器的角度处理路径和权限。
COPY命令中命名的文件由。直接读取或写入 服务器,而不是客户端应用程序。因此,他们必须居住在 或者可以访问数据库服务器计算机,而不是客户端。他们 必须是PostgreSQL用户可以访问,可读或可写的 (服务器运行的用户ID),而不是客户端。 Source
如果您尝试写入PostgreSQL服务器无法查看的文件,那么您将获得"没有这样的文件或目录"。如果您尝试写入PostgreSQL服务器缺少权限的目录中的文件,您将获得"权限被拒绝"。
因此,PostgreSQL用户(服务器运行的用户ID)缺少对" z"的权限。