During database running, query statements are blocked in some service scenarios and run for an excessively long time. In this case, you can forcibly terminate the faulty session.
gsql -d postgres -p 8000
postgres is the name of the database, and 8000 is the port number of the CN.
If information similar to the following is displayed, the connection has been established:
gsql ((Gauss200 V100R008C00 build 50dc16a6) compiled at 2018-03-02 05:49:21 commit 1071 last mr 1373) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. postgres=#
SELECT w.query as waiting_query, w.pid as w_pid, w.usename as w_user, l.query as locking_query, l.pid as l_pid, l.usename as l_user, t.schemaname || '.' || t.relname as tablename from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid and not l1.granted join pg_locks l2 on l1.relation = l2.relation and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid where w.waiting;
The thread ID, user information, query status, as well as information about the tables and schemas that block the query statements are returned.
If information similar to the following is displayed, the session is successfully terminated:
PG_TERMINATE_BACKEND ---------------------- t (1 row)
If a command output similar to the following is displayed, a user is attempting to terminate the session, and the session will be reconnected rather than being terminated.
FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
If the PG_TERMINATE_BACKEND function is used to terminate the background threads of the session, the gsql client will be reconnected rather than be logged out.