微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可以使用PostgreSQL TYPE来定义dblink表吗?

在Postgres中,您可以使用dblink链接到其他数据库,如下所示:
SELECT *
FROM dblink (
    'dbname=name port=1234 host=host user=user password=password','select * from table'
) AS users([insert each column name and its type here]);

但这很冗长.

我通过使用dblink_connect和dblink_disconnect从我的dblink查询中抽象连接字符串来缩短它.但是,这仍然留给我手动表定义(即,[在此处插入每个列名称及其类型]).

而不是手动定义表,有没有办法我可以用TYPE或其他任何可重复使用的东西来定义它?

在我的例子中,我必须加入的远程表的数量和涉及的列数使我的查询量大.

我尝试过以下方面:

SELECT *
FROM dblink (
    'myconn','select * from table'
) AS users(postgres_pre_defined_type_here);

但我收到以下错误

错误:返回“记录”的函数需要列定义列表

在考虑为dblink创建多个类型时,您也可以接受创建多个函数.这些功能定义明确且易于使用.

例:

create or replace function dblink_tables()
returns table (table_schema text,table_name text)
language plpgsql
as $$
begin
    return query select * from dblink (
        'dbname=test password=mypassword','select table_schema,table_name from @R_28_4045@ion_schema.tables')
    as tables (table_schema text,table_name text);
end $$;

select table_name 
from dblink_tables()
where table_schema = 'public'
order by 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐