2017-01-30 207 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澄清 –