为什么 postgresql COPY 命令不能处理映射驱动器中的文件

Ham*_*sby 3 postgresql copy csv

我在将 CSV 文件从网络共享驱动器复制到 postgreSQL 时遇到问题,目前的解决方法是先将文件复制到本地驱动器,但这是链中的另一个过程,它变得过于混乱。

如果我运行以下命令

  COPY test_schema.test FROM 'X:\_Postgres DBs\Testing\test_file.csv' 
  CSV HEADER;
Run Code Online (Sandbox Code Playgroud)

我得到:

  ERROR:  could not open file "X:\_Postgres DBs\Testing\test_file.csv" 
  for reading: No such file or directory
Run Code Online (Sandbox Code Playgroud)

好的,所以 postgreSQL Server 不理解 Windows 映射驱动器,很好,但是如果我运行:

COPY test_schema.test FROM '\\ws7.domain.com\share-name\_Postgres
DBs\Testing\test_file2.csv' CSV HEADER;
Run Code Online (Sandbox Code Playgroud)

我得到:

  ERROR:  could not open file "\\ws7.domain.com\share-name\_Postgres
  DBs\Testing\test_file2.csv" for reading: Permission denied
Run Code Online (Sandbox Code Playgroud)

文件 test_file2.csv 可以在同一台服务器上本地打开,例如记事本/记事本++/写字板,因此看起来没有任何文件属性,例如“正在使用的文件”

任何人有任何提示如何将 COPY 与共享网络驱动器一起使用?(我们的数据库 UI 是用 Delphi 编码的,所以我正在寻找处理 postgresql 脚本的方法,我可以从 Delphi 调用,否则我将不得不编写一些繁琐的 Delphi Firedac 批处理方法。)

Cra*_*ger 6

COPY作为 PostgreSQL服务器运行,通常NETWORKSERVICE在 Windows 上运行。这是一个本地服务帐户,它无权访问您的用户帐户的共享驱动器网络登录凭据

使用psql命令\copy从客户端应用程序读取文件,在您的用户 ID 下运行并访问您的共享驱动器,然后通过客户端/服务器网络连接将其流式传输到 postgres 服务器。

我认为 PgAdmin-III 有一个类似的 CSV 导入命令,它也COPY ... FROM STDIN像 psql 一样使用\copy

如果您在 Windows AD 域中并且确实需要 PostgreSQL 来直接访问共享,则可以改为在域帐户下运行 PostgreSQL 服务器。但这通常是不必要的。