Как подключиться к базе из запроса в PostgreSQL

Суть сегодняшнего вопроса состоит в следующем можно ли подключиться к удаленной базе непосредственно из самого запроса, т.е. во время выполнения запроса осуществить подключения к другой базе и выполнить запрос там. Ответ, можно и сегодня мы рассмотрим такую возможность на примере PostgreSQL.

Недавно мы с Вами рассматривали возможность использования межбазового запроса в MSSql 2008 – Межбазовый запрос на Transact-SQL, теперь пришло время рассмотреть такую возможность в postgresql 8.4.2-1, используя pgAdmin.

Так как мы с Вами уже рассматривали, для чего может понадобиться межбазовый запрос, поэтому, повторяться мы не будем, а перейдем сразу к делу.

Рекомендация! Ниже пересиленные действия требуют начальных знаний 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 объединяете все эти представления и получаете результат.

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.