Thread: [Bug / Question ] " authentication_timeout " is invalid.
- authentication_timeout (integer)
Maximum time to complete client authentication, in seconds. If a would-be client has not completed the authentication protocol in this much time, the server closes the connection. This prevents hung clients from occupying a connection indefinitely. The default is one minute (1m). This parameter can only be set in the postgresql.conf file or on the server command line.
Best Regards,
James Lin
On Wed, Sep 16, 2015 at 3:27 AM, =E6=9E=97=E4=BF=8A=E5=BD=A5 <james.lin@cen= oq.com> wrote: > Hi, sir, > > the "postgresql.conf" 's "authentication_timeout" is not active. > > The Log: > > -------------------------------------------------------------------------= ------------------------ > [BEGIN] 2015/9/16 17:57:37 > [postgres@pg95 ~]$ psql -V > psql (PostgreSQL) 9.5alpha2 > [postgres@pg95 ~]$ time psql -c 'show authentication_timeout ;' > Password: > authentication_timeout > ------------------------ > 1min > (1 row) > real 4m39.528s > user 0m0.003s > sys 0m0.002s > > [END] 2015/9/16 18:03:10 > > -------------------------------------------------------------------------= -------------------------- > The document is said : > From: > > http://www.postgresql.org/docs/9.4/static/runtime-config-connection.html > > authentication_timeout (integer) > > Maximum time to complete client authentication, in seconds. If a would-be > client has not completed the authentication protocol in this much time, t= he > server closes the connection. This prevents hung clients from occupying a > connection indefinitely. The default is one minute (1m). This parameter > can only be set in the postgresql.conf file or on the server command line= . > > I can't find about this information or solution by goolge search or forum= , > Please tell me how to verify it is active . or check it running? > What happens behind the scenes is that psql first tries to connect without a password. It is told that it can't connect without a password. It closes the uncompleted connection. Then psql asks you for a password, waits until you enter one, and then starts a new connection using the password. So during the wait time, there is no pending connection to the database to be timed out. It is the client program psql which is doing the waiting, not the database server. Cheers, Jeff
On Wed, Sep 16, 2015 at 9:02 PM, =E6=9E=97=E4=BF=8A=E5=BD=A5 <james.lin@cen= oq.com> wrote: > Hi , Jeff, > Thank you for reply. I used to use in the following ways but still > could not be verified: > ----------- Log start --------------------- > [BEGIN] 2015/9/17 11:51:51 > [postgres@pg95 ~]$ cat test.sh > > #!/bin/bash > ip a |grep eth0 > psql -h 100.200.100.211<<EOF > show authentication_timeout; > select now(); > \! sh net_test.sh > select now(); > EOF > That isn't going to work because net_test.sh isn't called until after the connection is authenticated. It is difficult to interrupt the process during the brief instant between when the connection was opened and when it is authenticated. Start psql, and when it is waiting for the password, find the pid for psql and start gdb against the psql process (gdb -p <pid>) In gdb, do: (gdb) b PQconnectStartParams Breakpoint 1 at 0x7f5de60bdf70: file fe-connect.c, line 561. (gdb) c Then go back and complete the password in psql. The gdb session will have triggered the breakpoint. Wait for less than the timeout, and hit 'c' and enter in the debugger. The connection will complete. Or, wait for more than the timeout and hit 'c' and enter in the debugger. The connection will error out, as the server side hung up on it. Cheers, Jeff
best regards,
James
On Wed, Sep 16, 2015 at 3:27 AM, 林俊彥 <james.lin@cenoq.com> wrote:Hi, sir,the "postgresql.conf" 's "authentication_timeout" is not active.The Log:-------------------------------------------------------------------------------------------------[BEGIN] 2015/9/16 17:57:37[postgres@pg95 ~]$ psql -Vpsql (PostgreSQL) 9.5alpha2[postgres@pg95 ~]$ time psql -c 'show authentication_timeout ;'Password:authentication_timeout------------------------1min(1 row)real 4m39.528suser 0m0.003ssys 0m0.002s[END] 2015/9/16 18:03:10---------------------------------------------------------------------------------------------------The document is said :From:
- authentication_timeout (integer)
Maximum time to complete client authentication, in seconds. If a would-be client has not completed the authentication protocol in this much time, the server closes the connection. This prevents hung clients from occupying a connection indefinitely. The default is one minute (1m). This parameter can only be set in the postgresql.conf file or on the server command line.
I can't find about this information or solution by goolge search or forum,Please tell me how to verify it is active . or check it running?What happens behind the scenes is that psql first tries to connect without a password. It is told that it can't connect without a password. It closes the uncompleted connection. Then psql asks you for a password, waits until you enter one, and then starts a new connection using the password. So during the wait time, there is no pending connection to the database to be timed out. It is the client program psql which is doing the waiting, not the database server.Cheers,Jeff
On Wed, Sep 16, 2015 at 9:02 PM, 林俊彥 <james.lin@cenoq.com> wrote:Hi , Jeff,Thank you for reply. I used to use in the following ways but still could not be verified:----------- Log start ---------------------[BEGIN] 2015/9/17 11:51:51[postgres@pg95 ~]$ cat test.sh#!/bin/baship a |grep eth0psql -h 100.200.100.211<<EOFshow authentication_timeout;select now();\! sh net_test.shselect now();EOFThat isn't going to work because net_test.sh isn't called until after the connection is authenticated.It is difficult to interrupt the process during the brief instant between when the connection was opened and when it is authenticated.Start psql, and when it is waiting for the password, find the pid for psql and start gdb against the psql process (gdb -p <pid>)In gdb, do:(gdb) b PQconnectStartParamsBreakpoint 1 at 0x7f5de60bdf70: file fe-connect.c, line 561.(gdb) cThen go back and complete the password in psql. The gdb session will have triggered the breakpoint.Wait for less than the timeout, and hit 'c' and enter in the debugger. The connection will complete.Or, wait for more than the timeout and hit 'c' and enter in the debugger. The connection will error out, as the server side hung up on it.Cheers,Jeff