执行函数从本地PostgreSQL数据库返回远程PostgreSQL数据库中的数据

时间:2014-07-21 10:41:47

标签: postgresql postgresql-9.3

Postgres版本:9.3.4

我需要执行一个驻留在远程数据库中的函数。该函数根据给定的参数返回统计数据表。

我实际上只镜像我本地数据库中的函数,以使用我的数据库角色和授权来锁定对此函数的访问。

我发现以下似乎只提供基于表格的访问。

第一个问题:是正确的还是有办法将这些库用于非基于表的操作?

我发现以下内容似乎为我提供了对外部数据库的任何SQL操作。由于手动连接和错误处理,负面似乎增加了复杂性并降低了性能。

第二个问题:这些假设是否正确,是否有任何方法可以绕过这些问题或库/样本可以从哪个开始?

1 个答案:

答案 0 :(得分:3)

fdw接口提供了一种创建库的方法,该库可以允许postgresql数据库查询任何外部数据源,就像它是一个表一样。从这个角度来看,它可以做你想要的。

但内置的postgresql_fdw驱动程序不允许您将函数指定为远程表。

您可以编写自己的fdw驱动程序,可能使用多色库或其他语言。这可能是一些工作,并且会有一些特定的缺点,特别是我不知道如何将参数传递给函数。

dblink可能是最简单的解决方案。它允许您在远程服务器上执行任意SQL,返回一组记录。

SELECT *
FROM dblink('dbname=mydb', 'SELECT * FROM thefunction(1,2,3)')
     AS t1(col1 INTEGER, col2 INTEGER);

还有其他潜在的解决方案,但他们都会更加努力地设置。