Postgres 版本:9.3.4
我需要执行驻留在远程数据库中的函数。该函数根据给定的参数返回一个统计数据表。
我实际上只是在我的本地数据库中镜像该函数,以使用我的数据库角色和授权来锁定对该函数的访问。
我发现以下似乎只提供基于表的访问。
- http://www.postgresql.org/docs/9.3/static/postgres-fdw.html
- http://multicorn.org/foreign-data-wrappers/#idsqlalchemy-foreign-data-wrapper
第一个问题:这是正确的还是有办法将这些库用于非基于表的操作?
我发现以下内容似乎为我提供了对外部数据库的任何 SQL 操作。由于手动连接和错误处理,负面影响似乎增加了复杂性并降低了性能。
第二个问题:这些假设是否正确,是否有任何方法可以绕过这些问题或可以从中开始的库/示例?
最佳答案
fdw 接口(interface)提供了一种创建库的方法,它允许 postgresql 数据库查询任何外部数据源,就好像它是一个表一样。从这个角度来看,它可以做你想做的事。
然而,内置的 postgresql_fdw 驱动程序不允许您将函数指定为远程表。
您可以编写自己的 fdw 驱动程序,可能使用 multicorn 库或其他语言。不过,这可能需要一些工作,并且会有一些特定的缺点,特别是我不知道如何将参数传递给函数。
dblink可能是最简单的解决方案。它允许您在远程服务器上执行任意 SQL,返回一组记录。
SELECT *
FROM dblink('dbname=mydb', 'SELECT * FROM thefunction(1,2,3)')
AS t1(col1 INTEGER, col2 INTEGER);
还有其他潜在的解决方案,但它们都需要更多的努力来设置。
关于postgresql - 执行函数从本地 PostgreSQL 数据库返回远程 PostgreSQL 数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24863140/