Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从表中选择*作为表数据库链接_Postgresql_Postgresql 9.3_Dblink - Fatal编程技术网

Postgresql 从表中选择*作为表数据库链接

Postgresql 从表中选择*作为表数据库链接,postgresql,postgresql-9.3,dblink,Postgresql,Postgresql 9.3,Dblink,要从另一个数据库中进行选择,我尝试使用Postgres的dblink或fdw扩展,如下所示: 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, co

要从另一个数据库中进行选择,我尝试使用Postgres的dblink或fdw扩展,如下所示:

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');

但这是行不通的。如何解决这个问题?

您不能这样做,因为PostgreSQL必须在查询计划时知道列将是什么


但是指定列应该不会有问题,而且在大多数情况下,避免SQL中的“
*
”是一个很好的做法。

DBLink返回一个通用的数据行类型。其中一个恼人的事情是,为了使用它,您需要指定输出结构。也许在PostgreSQL的未来版本中,这种缺乏泛型行类型内省的限制将被忽略。缺乏内省不仅是DbLink的问题,也是其他通用行类型返回函数(如TableFunc交叉表函数)的问题?。任何有足够声誉的人都可以结束一个问题,但这并不意味着我做了。对于FDWs,有来自PostgreSQL 9.5+的命令,但在
dblink
中没有类似的命令。谢谢@pozs的建议