pg_settings psql 和 npgsql 之间的差异

pg_settings discrepancy between psql and npgsql

连接到 pg 11 实例并执行时

select setting, source from pg_settings
where name='tcp_keepalives_interval';

我在通过 psql 连接和使用 using Npgsql;

的脚本之间得到两种不同的响应

命令行psql客户端returns

0   | default

而 Npgsql 脚本将 return

75  | default

75 匹配 net.ipv4.tcp_keepalive_intvl 但我仍然期望 0.

造成这种差异的原因是什么?我通常如何在 C# 中使用 Npgsql 来解释它?

查看我的 crystal 球,我发现您的数据库服务器不在 Windows 上并且 psql 会话在数据库服务器上 运行。您的 psql 会话通过 UNIX 套接字连接(local 连接)。

The documentation 说(强调我的):

keepalives_count

Controls the number of TCP keepalives that can be lost before the client's connection to the server is considered dead. A value of zero uses the system default. This parameter is ignored for connections made via a Unix-domain socket, or if keepalives are disabled. It is only supported on systems where TCP_KEEPCNT or an equivalent socket option is available; on other systems, it has no effect.

如果您通过 TCP 与 psql 连接,您也应该看到 75。