Запуск запроса postgres между двумя базами данных с условиями

У меня есть две базы данных postgres на одном сервере.

Мне нужно извлечь записи из одной базы данных и поместить их в другую. Это мой рабочий запрос.

insert into "tblInvInfo"
select "iiInvNum", "iiItemCode","iiUnitMeasure", "iiUnitQuantity", 
"iiPrice", "iiUnits" from 
 dblink ('dbname=dbESM', 'SELECT * from "tblInvInfo" ')
    AS invinfo ("iiInvNum" varchar, "iiItemCode" varchar, 
    "iiItemName" varchar, "iiUnitMeasure" varchar, "iiUnitQuantity" numeric, 
    "iiPrice" numeric, "iiUnits" numeric)

По сути, это извлекает записи из tblInvInfo в dbESM и помещает их в идентичную таблицу dbESMTemp.

Теперь к требованию... tblInvMaster содержит основные сведения о счете (включая дату), а tblInvInfo содержит сведения об элементах.

Мне нужно извлечь из tblInvInfo только те записи, которые соответствуют определенным условиям в tblInvMaster. Я предполагаю, что это делается с помощью простого внутреннего запроса на соединение. Итак, вот что я пробовал:

insert into "tblInvInfo"
select "iiInvNum", "iiItemCode","iiUnitMeasure", 
"iiUnitQuantity", "iiPrice", "iiUnits" from 
 dblink ('dbname=dbESM', 'SELECT "iiInvNum", "iiItemCode",
 "iiUnitMeasure", "iiUnitQuantity", "iiPrice", "iiUnits" from 
 (select "tblInvInfo".* from (select * from "tblInvMaster" 
 where "invDate" between \'2014-08-01\' and \'2014-10-17\') invmaster 
 inner join "tblInvInfo" on "invInvNum" = "iiInvNum"  ) filteredinvinfo ')
    AS invinfo ("iiInvNum" varchar, "iiItemCode" varchar,
     "iiItemName" varchar, "iiUnitMeasure" varchar, 
     "iiUnitQuantity" numeric, "iiPrice" numeric, "iiUnits" numeric);

Для приведенного выше запроса я получаю следующую ошибку:

ОШИБКА: синтаксическая ошибка в «2014» или рядом с ним СТРОКА 7: где «invDate» между \'2014-08-01\' и \'2014-10-17\') ... ^

Мое соединение правильное, но у меня есть три области сомнения относительно запроса:

  1. Правильно ли дается кодировка?
  2. Правильно ли используется метод экранирования (обратная косая черта) в запросе?
  3. Я не знаю, как указать имена столбцов для извлечения с помощью этой функции dblink.

Любая помощь в решении этой проблемы действительно приветствуется.


person itsols    schedule 18.10.2014    source источник
comment
Вы экранируете кавычки другой кавычкой в ​​dblink, см. stackoverflow.com /вопросы/6615732/   -  person John Powell    schedule 18.10.2014
comment
Кроме того, вы можете вместо этого взглянуть на внешние оболочки данных. из dblink. Я мало играл с ними, но они считаются более современным подходом, чем dblink.   -  person John Powell    schedule 18.10.2014
comment
Спасибо, Джон, но я думаю, что буду придерживаться dblink из-за его простоты и ограниченного использования в моем случае.   -  person itsols    schedule 19.10.2014