st 18. 9. 2019 v 5:59 odesÃlatel vignesh C <vignes...@gmail.com> napsal:
> On Wed, Sep 18, 2019 at 8:30 AM Pavel Stehule <pavel.steh...@gmail.com> > wrote: > > > > > Hi Pavel, > > One Comment: > In the documentation we say drop database will fail after 60 seconds > <varlistentry> > <term><literal>FORCE</literal></term> > <listitem> > <para> > Attempt to terminate all existing connections to the target database. > </para> > <para> > This will fail, if current user has no permissions to terminate other > connections. Required permissions are the same as with > <literal>pg_terminate_backend</literal>, described > in <xref linkend="functions-admin-signal"/>. > > This will also fail, if the connections do not terminate in 60 > seconds. > </para> > </listitem> > </varlistentry> > This is not valid. With FORCE flag the clients are closed immediately > > But in TerminateOtherDBBackends: > foreach (lc, pids) > + { > + int pid = lfirst_int(lc); > + > + (void) kill(pid, SIGTERM); /* ignore any error */ > + } > + > + /* sleep 100ms */ > + pg_usleep(100 * 1000L); > + } > > We check for any connected backends after sending kill signal in > CountOtherDBBackends and throw error immediately. > > I had also tested this scenario to get the following error immediately: > test=# drop database (force) test1; > ERROR: database "test1" is being accessed by other users > DETAIL: There is 1 other session using the database. > > sure - you cannot to kill self > I feel some change is required to keep documentation and code in sync. > I am waiting to Tom's reply about necessary rights. But the doc part is not synced, and should be fixed. Pavel > > Regards, > Vignesh > EnterpriseDB: http://www.enterprisedb.com >