Получение локального системного пути при выполнении запросов Postgres на удаленной системе в Delphi - PullRequest
1 голос
/ 08 февраля 2012

я работаю над приложением delphi 7 с postgres 9 в качестве базы данных.приложение работает двумя способами: оно может подключаться к базе данных

  1. Postgres в локальной системе
  2. Postgres в удаленной системе

как в локальной, так и в локальной сети.удаленная база данных 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' Fails в качестве пути/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. Как создать файл в каталоге на удаленной системе для выполнения запроса.

я пытался изменить путь как 'C:\Documents and Settings\All Users\Documents\drDir\, но я получаю эту ошибку enter image description here

РЕДАКТИРОВАТЬ я пытался

COPY (Выбрать* из mytable where mycolumn in (2011406)) ДЛЯ СОЗДАНИЯ С БИНАРНЫМИ, но как получить результат запроса?

1 Ответ

2 голосов
/ 08 февраля 2012

1) невозможно при указании имени файла ( выдержка из документов ):

COPY с именем файла указывает серверу PostgreSQL непосредственно читать или записывать вфайл.Файл должен быть доступен для сервера, а имя должно быть указано с точки зрения сервера.

В следующем предложении даются некоторые идеи (и это также зависит от драйверов):

Когда указано STDIN или STDOUT, данные передаются через соединение между клиентом и сервером.

2) это вопрос доступа к серверу, обратитесь кадминистратор ... но имейте в виду, что при создании папки на сервере пользователь, под которым работает Postgres, должен иметь права на запись в эту папку.

...