У меня есть две базы данных 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\') ... ^
Мое соединение правильное, но у меня есть три области сомнения относительно запроса:
- Правильно ли дается кодировка?
- Правильно ли используется метод экранирования (обратная косая черта) в запросе?
- Я не знаю, как указать имена столбцов для извлечения с помощью этой функции dblink.
Любая помощь в решении этой проблемы действительно приветствуется.