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

标签 postgresql postgresql-9.3

Postgres 版本:9.3.4

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

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

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

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

我发现以下内容似乎为我提供了对外部数据库的任何 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/

相关文章:

postgresql - 如何通过 Kettle 在 PostgreSQL 表中插入 UUID 值?

java - Postgres JDBC 驱动程序 `org.postgresql.ds.PGSimpleDataSource` 是线程安全的吗?

postgresql - 在 pg_restore 期间禁用 WAL 归档?

postgresql - 我是否需要将 ALL 授予 PostgreSQL 9.3 数据库中某个表的所有者?

sql - PostgreSQL 中的多种数据类型数组

c++ - 使用 libpqxx 批量存储数据或如何在 libpqxx 中使用 COPY 语句

postgresql - 为什么这个 PostgreSQL 事务给出 "WARNING: there is no transaction in progress"

sql - 如何在使用子查询时消除带有连接的笛卡尔积?

sql - 计算产品库存的加权平均成本

python - 加入所有 PostgreSQL 表并制作一个 Python 字典