Postgres版本:9.3.4
我需要执行一个驻留在远程数据库中的函数。该函数根据给定的参数返回统计数据表。
我实际上只镜像我本地数据库中的函数,以使用我的数据库角色和授权来锁定对此函数的访问。
我发现以下似乎只提供基于表格的访问。
第一个问题:是正确的还是有办法将这些库用于非基于表的操作?
我发现以下内容似乎为我提供了对外部数据库的任何SQL操作。由于手动连接和错误处理,负面似乎增加了复杂性并降低了性能。
第二个问题:这些假设是否正确,是否有任何方法可以绕过这些问题或库/样本可以从哪个开始?
答案 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);
还有其他潜在的解决方案,但他们都会更加努力地设置。