我试图连接到一个远程服务器使用外部数据 Package 器之间传输数据库的一些数据,但关键是获取“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;
DETAIL:SSL支持未编译时,sslmode值“require”无效
我试过使用"sslmode=require"
连接到psql
-但似乎没有帮助。在创建服务器时,我还将sslmode
作为一个标志。我连接的postgres示例在Heroku上。如果我连接到远程服务器上的另一个数据库,则会运行查询-但从本地数据库连接时会失败。如何修复SSL支持未编译的问题?
2条答案
按热度按时间dsf9zpds1#
本地PostgreSQL示例使用本地
libpq
库连接到远程示例。如果在编译时,该库已经配置了
--with-openssl
(传递到postgres源代码树的顶级./configure
脚本的选项),那么它会动态链接到openssl
库,并添加加密会话的调用站点。另一方面,如果没有使用此选项进行配置,则生成的
libpq
根本没有任何SSL功能,并且使用该库无法连接到需要SSL的远程服务器。根据错误消息,您处于第二种情况。
解决此问题的唯一方法是将已安装的
libpq
库替换为另一个使用SSL支持编译的库,这也意味着您的系统上安装了OpenSSL。您可以自己编译它,也可以根据自己的喜好通过软件包安装它。一般来说,PostgreSQL的预编译版本现在倾向于启用SSL支持。即使libpq源代码在服务器源代码中,也可以单独编译它们,并独立于其他库使用该库。有个问题How to download, compile & install ONLY the libpq source on a server that DOES NOT have PostgreSQL installed
l5tcr1uw2#
如果你在Lambda中遇到这个错误,你应该使用一个带有ssl的psycopg2版本(例如:this repo有psycopg2,有和没有ssl)。