2017-01-30 133 views
1

要從另一個數據庫中,我嘗試使用DBLINK或外籍家政延伸的Postgres的,像這樣的選擇:SELECT * FROM表作爲表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

哦真的嗎?任何有良好聲譽的人都可以關閉一個並不意味着我做到了的問題。 –

+0

使用FDW時,PostgreSQL 9.5+有一個['IMPORT FOREIGN SCHEMA'](https://www.postgresql.org/docs/current/static/sql-importforeignschema.html)命令,但'dblink' 。 – pozs

+0

謝謝@pozs您的建議 –

回答

1

你不能那樣做,因爲PostgreSQL必須知道在查詢計劃時間列將是什麼。

但是,指定列並不是問題,並且無論如何,在大多數情況下,最好避免SQL中的「 * 」。

1

DBLink返回一個通用數據行類型。其中一個惱人的事情是,爲了使用它,你需要指定輸出結構。也許在未來的Pos​​tgreSQL版本中,這種對通用行類型缺乏內省的限制將被消除。缺乏內省不僅是DbLink的問題,而且還包括其他一些通用的行類型返回函數,如TableFunc交叉表函數

+0

謝謝@Danish shaikh澄清 –