在delphi中的远程系统上执行Postgres查询时获取本地系统路径

时间:2012-02-08 13:29:36

标签: delphi postgresql delphi-7

我正在使用 postgres 9 作为数据库处理 delphi 7 应用程序。 应用程序有两种工作方式,它可以连接到

  1. 本地系统上的Postgres数据库
  2. 远程系统上的Postgres
  3. 在本地和远程postgres上,数据库将具有相同数量的表。

    我们有一个模块,我们使用COPY创建数据库表的备份,并将结果写入系统上的文件。 例子

    query1:='COPY (Select * from mytable where mycolumn in (2011406)) TO 'C:/Documents and Settings/All Users/Documents/drDir/myfile.bck' WITH BINARY'

         Query_dmp_res.SQL.Clear;
         Query_dmp_res.SQL.Add(query1) ;
         Query_dmp_res.ExecSQL;
    

    如果本地系统上不存在路径C:/Documents and Settings/All Users/Documents/drDir,则会创建路径。

    由于上述查询在本地系统上执行,C:/Documents and Settings/All Users/Documents/drDir/也存在 在使用本地工作时,这种方法很有效。

    但问题是我们连接到远程系统时。查询    'COPY (Select * from mytable where mycolumn in (2011406)) TO 'C:/Documents and Settings/All Users/Documents/drDir/myfile.bck' WITH BINARY' 失败,因为路径/drDir/是在本地系统上创建的,而不是在远程系统上创建的。

    enter image description here

    但即使远程系统上存在路径'C:/Documents and Settings/All Users/Documents/drDir/,也会在远程系统上创建文件/myfile.bck

    任何人都可以告诉我如何

    1. 提供系统路径,以便在执行查询后在我的系统上创建文件/myfile.bck。 这是如何在查询中指定我的本地系统路径 'COPY (Select * from mytable where mycolumn in (2011406)) TO 'myLocalSystemPath/myfile.bck' WITH BINARY'

    2. 如何在远程系统上创建File文件以执行查询。

    3. 我尝试将路径更改为'C:\Documents and Settings\All Users\Documents\drDir\ 但我得到这个错误 enter image description here

      修改 我试过了

        

      COPY(选择* from mytable where mycolumn in(2011406))to STDOUT WITH BINARY   但如何获得查询结果?

1 个答案:

答案 0 :(得分:2)

1)指定文件名时不可能(excerpt from the docs):

  

带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。

下一句虽然给你一些想法(这也取决于司机):

  

当指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。

2)访问服务器的问题,请咨询您的管理员......但请记住,当您在服务器上创建文件夹时,Postgres运行的用户应具有该文件夹的写入权限