从本地PostgreSQL数据库执行返回数据的函数,访问远程PostgreSQL数据库。

3

Postgres版本:9.3.4

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

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

我发现以下内容似乎只提供基于表的访问:

第一个问题:这是否正确?还有没有其他方法可以使用这些库来进行非表格操作?

我发现以下内容似乎可以让我在外部数据库上执行任何SQL操作。负面影响似乎是由于手动连接和错误处理而导致的复杂性增加和性能降低。

第二个问题:这些假设是否正确?是否有任何方法可以绕过这些问题或者可以开始使用的库/示例?


有 https://wiki.postgresql.org/wiki/PL/Proxy,但那可能也太过复杂了。 - Richard Huxton
1个回答

4

fdw接口提供了一种方法,可以制作一个库,使得postgresql数据库可以查询任何外部数据源,就像查询表一样。从这个角度来看,它可以做到你想要的。

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

您可以编写自己的fdw驱动程序,可能使用multicorn库或其他语言。虽然这可能需要一些工作,并且会有一些具体的缺点,特别是我不知道如何向函数传递参数。

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

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

还有其他潜在的解决方案,但它们都需要更多的工作来设置。


谢谢您确认了我怀疑的事情。我会等一段时间,看看是否有人知道如何在FDW中使用函数,并回退到使用dblink,因为它似乎比编写自定义FDW要少得多的工作。 - atom.gregg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接