当未使用外部数据包装器编译 SSL 支持时,Postgres SSLMode 值“require”无效

Kev*_*tre 0 postgresql

我正在尝试使用外部数据包装器连接到远程服务器,以便在数据库之间传输一些数据,但关键是得到“SSLMode 值“require”在未编译 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;
Run Code Online (Sandbox Code Playgroud)

详细信息:当未编译 SSL 支持时,sslmode 值“require”无效

我尝试过连接到psqlusing "sslmode=require"- 但这似乎没有帮助。我还在sslmode创建服务器时将其作为标志包含在内。我连接的 postgres 实例位于 Heroku 上。如果我连接到远程服务器上的不同数据库,查询就会运行,但本地数据库会失败。如何修复 SSL 支持未编译的问题?

Dan*_*ité 6

本地 PostgreSQL 实例使用本地libpq库连接到远程实例。

如果在编译时,该库已配置(传递到postgres 源树--with-openssl顶级脚本的选项),则它会动态链接到该库,并添加用于加密会话的调用站点。./configureopenssl

另一方面,如果没有配置此选项,则libpq生成的文件根本不具有任何 SSL 功能,并且该库不可能连接到需要 SSL 的远程服务器。

根据错误提示,您属于第二种情况。

解决此问题的唯一方法是将已安装的libpq库替换为另一个支持 SSL 编译的库,这也意味着您的系统上安装了 OpenSSL。根据您的喜好,可以自行编译或通过软件包安装。一般来说,现在 PostgreSQL 的预编译版本往往启用了 SSL 支持。

即使 libpq 源位于服务器源内部,也可以单独编译它们并独立于其余库使用该库。有一个问题:如何在未安装 PostgreSQL 的服务器上下载、编译和安装 libpq 源