Суть сегодняшнего вопроса состоит в следующем можно ли подключиться к удаленной базе непосредственно из самого запроса, т.е. во время выполнения запроса осуществить подключения к другой базе и выполнить запрос там. Ответ, можно и сегодня мы рассмотрим такую возможность на примере PostgreSQL.
Недавно мы с Вами рассматривали возможность использования межбазового запроса в MSSql 2008 – Межбазовый запрос на Transact-SQL, теперь пришло время рассмотреть такую возможность в postgresql 8.4.2-1, используя pgAdmin.
Так как мы с Вами уже рассматривали, для чего может понадобиться межбазовый запрос, поэтому, повторяться мы не будем, а перейдем сразу к делу.
Рекомендация! Ниже пересиленные действия требуют начальных знаний SQL, поэтому рекомендую ознакомиться со следующим материалом:
- SQL код – самоучитель по SQL для начинающих программистов
- Зачем нужны представления (views) в базах данных
- Union и union all написание простых запросов на SQL
И так приступим.
Подключение к базе из запроса в PostgreSQL
Для этого существует функция dblink с помощью, которой и можно осуществить задуманное.
Пример:
SELECT q.pole1, q.pole2, q.pole3 FROM dblink('host=адрес сервера(ip) dbname=имя базы данных port=порт user=имя пользователя для подключения к базе password=пароль для подключения к базе'::text, 'SELECT pole1, pole2, pole3 FROM test_table;'::text) q (pole1 numeric, pole2 numeric, pole3 numeric);
Здесь все достаточно просто, пишете запрос select, а обращаетесь к функции dblink, в которую передаете два параметра первый строка подключения, и второй сам запрос, затем задаете псевдоним (в нашем случае это q) и в конце задаете типы данных возвращающихся полей.
Вот в принципе и все, и если нужно объединить данные разных баз, создаете представления на основе вышеприведенного примера, по каждой базе, затем через объединение union или union all объединяете все эти представления и получаете результат.