Postgresql数据库链接

Postgresql数据库链接,postgresql,dblink,Postgresql,Dblink,在看一个例子时试着偷懒 SELECT realestate.address, realestate.parcel, s.sale_year, s.sale_amount, FROM realestate INNER JOIN dblink('dbname=somedb port=5432 host=someserver user=someuser password=somepwd',

在看一个例子时试着偷懒

SELECT realestate.address, realestate.parcel, s.sale_year, s.sale_amount, 
        FROM realestate INNER JOIN 
                dblink('dbname=somedb port=5432 host=someserver 
                user=someuser password=somepwd',
                'SELECT parcel_id, sale_year, 
                    sale_amount FROM parcel_sales')
            AS s(parcel_id char(10),sale_year int, sale_amount int)
有没有办法从表中填写AS部分

我正在从不同服务器上具有相同名称和结构的表复制数据。 如果我可以从现有表中复制结构,这将节省我很多时间

谢谢
Bruce

答案是:没有。请参阅文档:

因为dblink可以用于任何查询,所以它被声明为返回记录,而不是指定任何特定的列集。这意味着您必须在调用查询中指定预期的列集,否则PostgreSQL将不知道预期的内容

编辑:顺便说一下,对于表或视图,您可以在第一次查询中获取字段名称和类型:

select column_name 
from information_schema.columns
where table_name = 'your_table_or_view';
然后可以使用它来填充字段声明


亚历克西斯回答是:没有。见文件:

因为dblink可以用于任何查询,所以它被声明为返回记录,而不是指定任何特定的列集。这意味着您必须在调用查询中指定预期的列集,否则PostgreSQL将不知道预期的内容

编辑:顺便说一下,对于表或视图,您可以在第一次查询中获取字段名称和类型:

select column_name 
from information_schema.columns
where table_name = 'your_table_or_view';
然后可以使用它来填充字段声明


Alexis

是,但您可以从信息模式中选择列名称。表名称='您的表或视图'的列不,您不能直接这样做。但您所要做的就是编写一个简单的PLPGSQL函数来构建查询字符串并执行它。是的,但您可以从信息模式中选择列名称。表名称为“您的表”或“视图”的列不,您不能直接这样做。但您所要做的就是编写一个简单的PLPGSQL函数来构建查询字符串并执行它。