我尝试使用外部数据包装器连接到远程服务器,以便在数据库之间传输一些数据,但是很容易获得SSLMode值"要求"如果未在'中编译SSL支持,则无效。这些是我正在运行的片段:
CREATE SERVER remote FOREIGN DATA WRAPPER postgres_fdw
OPTIONS(dbname '...', host '...', port '...', sslmode 'require');
CREATE USER MAPPING FOR USER SERVER remote
OPTIONS (user '...', password '...');
CREATE FOREIGN TABLE remote.accounts (
...
);
SELECT * FROM remote.accounts;
详细信息:sslmode值"要求"在
中未编译SSL支持时无效
我尝试使用psql
连接到"sslmode=require"
- 但这似乎没有帮助。在创建服务器时,我还将sslmode
作为标志包含在内。我连接的postgres实例是在Heroku上。如果我连接到远程服务器上的其他数据库,则运行查询 - 但是从本地数据库失败。如何修复SSL支持未编译?
答案 0 :(得分:2)
本地PostgreSQL实例使用本地libpq
库连接到远程实例。
如果在编译时,该库已配置--with-openssl
(传递给postgres源代码树的顶级./configure
脚本的选项),则它会动态链接到{ {1}}库和加密会话的呼叫站点已添加。
另一方面,如果未配置此选项,则生成的openssl
根本没有任何SSL功能,并且该库无法连接到需要SSL的远程服务器。 / p>
根据错误消息,您是第二种情况。
解决此问题的唯一方法是将已安装的libpq
库替换为使用SSL支持编译的另一个库,这也意味着您已在系统上安装了OpenSSL。您可以自己编译,也可以根据自己的喜好通过包安装。一般来说,PostgreSQL的预编译版本往往会启用SSL支持。
即使libpq源位于服务器的源代码内,也可以单独编译它们,并且可以独立于其余库使用该库。 有一个问题:How to download, compile & install ONLY the libpq source on a server that DOES NOT have PostgreSQL installed