2017-01-30 4 views
1

Чтобы выбрать из другой базы данных, я стараюсь использовать DBLink или ИДП расширение Postgres, как это:Выбрать * Из таблицы Как таблица DBLink

CREATE EXTENSION dblink; 

SELECT * FROM 
dblink ('dbname = bd_name port = 5432 host = 10.6.6.6 user = username password = password', 
'SELECT id, code FROM sch_schema.table') 
AS new_table(id INTEGER, code character varying); 

Это прекрасно работает, когда я указать, какие столбцы я хочу, чтобы выбрать.

Моя проблема: как я могу выбрать все столбцы?

Я попытался это:

SELECT * FROM 
dblink ('dbname = bd_name port = 5432 host = 10.6.6.6 user = username password = password', 
'SELECT * FROM sch_schema.table'); 

Но это не работает. Как я могу решить эту проблему?

+0

Oh Действительно? Любой, у кого есть адекватная репутация, может закрыть вопрос, который не означает, что я это сделал. –

+0

С FDW есть команда '' IMPORT FOREIGN SCHEMA' (https://www.postgresql.org/docs/current/static/sql-importforeignschema.html) из PostgreSQL 9.5+, но ничего подобного в 'dblink' , – pozs

+0

спасибо @pozs за ваше предложение –

ответ

1

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

Но не обязательно указывать столбцы, и в любом случае, в большинстве случаев рекомендуется избегать “ * ” в SQL.

1

DBLink возвращает тип строки данных общего типа. Одна из досадных вещей об этом заключается в том, что для ее использования вам необходимо указать структуру вывода. Возможно, в будущих версиях PostgreSQL это ограничение отсутствия интроспекции общих типов строк будет обработано. Отсутствие интроспекции является проблемой не только для DbLink, но и для других функций возвращаемого типа типа типа TableFunc.

+0

спасибо @ Даниэль шейх за разъяснение –

Смежные вопросы