我正在使用 postgres 9 作为数据库处理 delphi 7 应用程序。 应用程序有两种工作方式,它可以连接到
在本地和远程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/
是在本地系统上创建的,而不是在远程系统上创建的。
但即使远程系统上存在路径'C:/Documents and Settings/All Users/Documents/drDir/
,也会在远程系统上创建文件/myfile.bck
。
任何人都可以告诉我如何
提供系统路径,以便在执行查询后在我的系统上创建文件/myfile.bck
。
这是如何在查询中指定我的本地系统路径
'COPY (Select * from mytable where mycolumn in (2011406)) TO 'myLocalSystemPath/myfile.bck' WITH BINARY'
如何在远程系统上创建File文件以执行查询。
我尝试将路径更改为'C:\Documents and Settings\All Users\Documents\drDir\
但我得到这个错误
修改 我试过了
COPY(选择* from mytable where mycolumn in(2011406))to STDOUT WITH BINARY 但如何获得查询结果?
答案 0 :(得分:2)
1)指定文件名时不可能(excerpt from the docs):
带有文件名的COPY指示PostgreSQL服务器直接读取或写入文件。该文件必须可供服务器访问,并且必须从服务器的角度指定名称。
下一句虽然给你一些想法(这也取决于司机):
当指定STDIN或STDOUT时,数据通过客户端和服务器之间的连接传输。
2)访问服务器的问题,请咨询您的管理员......但请记住,当您在服务器上创建文件夹时,Postgres运行的用户应具有该文件夹的写入权限