Use the right SQL commands for killing a process on PostgreSQL. See http://www.heidisql.com/forum.php?t=21760

This commit is contained in:
Ansgar Becker
2016-10-31 17:53:25 +00:00
parent bf9f6c6f6e
commit aa373aaaba
3 changed files with 11 additions and 8 deletions

View File

@ -4748,8 +4748,8 @@ msgid "Displaying objects from \"%s\" ..."
msgstr "Displaying objects from \"%s\" ..." msgstr "Displaying objects from \"%s\" ..."
#: main.pas:4784 #: main.pas:4784
msgid "Ignoring own process id #%s when trying to kill it." msgid "Ignoring own process id #%d when trying to kill it."
msgstr "Ignoring own process id #%s when trying to kill it." msgstr "Ignoring own process id #%d when trying to kill it."
#: main.pas:5158 #: main.pas:5158
msgid "Uptime" msgid "Uptime"

View File

@ -284,7 +284,7 @@ type
spAddColumn, spChangeColumn, spAddColumn, spChangeColumn,
spSessionVariables, spGlobalVariables, spSessionVariables, spGlobalVariables,
spISTableSchemaCol, spISTableSchemaCol,
spUSEQuery, spKillQuery, spUSEQuery, spKillQuery, spKillProcess,
spFuncLength, spFuncCeil); spFuncLength, spFuncCeil);
TDBConnection = class(TComponent) TDBConnection = class(TComponent)
@ -2029,6 +2029,7 @@ begin
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_SCHEMA'; FSQLSpecifities[spISTableSchemaCol] := 'TABLE_SCHEMA';
FSQLSpecifities[spUSEQuery] := 'USE %s'; FSQLSpecifities[spUSEQuery] := 'USE %s';
FSQLSpecifities[spKillQuery] := 'KILL %d'; FSQLSpecifities[spKillQuery] := 'KILL %d';
FSQLSpecifities[spKillProcess] := 'KILL %d';
FSQLSpecifities[spFuncLength] := 'LENGTH'; FSQLSpecifities[spFuncLength] := 'LENGTH';
FSQLSpecifities[spFuncCeil] := 'CEIL'; FSQLSpecifities[spFuncCeil] := 'CEIL';
end; end;
@ -2044,6 +2045,7 @@ begin
FSQLSpecifities[spISTableSchemaCol] := 'TABLE_CATALOG'; FSQLSpecifities[spISTableSchemaCol] := 'TABLE_CATALOG';
FSQLSpecifities[spUSEQuery] := 'USE %s'; FSQLSpecifities[spUSEQuery] := 'USE %s';
FSQLSpecifities[spKillQuery] := 'KILL %d'; FSQLSpecifities[spKillQuery] := 'KILL %d';
FSQLSpecifities[spKillProcess] := 'KILL %d';
FSQLSpecifities[spFuncLength] := 'LEN'; FSQLSpecifities[spFuncLength] := 'LEN';
FSQLSpecifities[spFuncCeil] := 'CEILING'; FSQLSpecifities[spFuncCeil] := 'CEILING';
end; end;
@ -2059,6 +2061,7 @@ begin
FSQLSpecifities[spISTableSchemaCol] := 'table_schema'; FSQLSpecifities[spISTableSchemaCol] := 'table_schema';
FSQLSpecifities[spUSEQuery] := 'SET search_path TO %s'; FSQLSpecifities[spUSEQuery] := 'SET search_path TO %s';
FSQLSpecifities[spKillQuery] := 'SELECT pg_cancel_backend(%d)'; FSQLSpecifities[spKillQuery] := 'SELECT pg_cancel_backend(%d)';
FSQLSpecifities[spKillProcess] := 'SELECT pg_cancel_backend(%d)';
FSQLSpecifities[spFuncLength] := 'LENGTH'; FSQLSpecifities[spFuncLength] := 'LENGTH';
FSQLSpecifities[spFuncCeil] := 'CEIL'; FSQLSpecifities[spFuncCeil] := 'CEIL';
end; end;

View File

@ -5441,7 +5441,7 @@ end;
procedure TMainForm.KillProcess(Sender: TObject); procedure TMainForm.KillProcess(Sender: TObject);
var var
t: Boolean; t: Boolean;
pid: String; pid: Int64;
Node: PVirtualNode; Node: PVirtualNode;
Conn: TDBConnection; Conn: TDBConnection;
begin begin
@ -5452,12 +5452,12 @@ begin
begin begin
Node := GetNextNode(ListProcesses, nil, True); Node := GetNextNode(ListProcesses, nil, True);
while Assigned(Node) do begin while Assigned(Node) do begin
pid := ListProcesses.Text[Node, ListProcesses.Header.MainColumn]; pid := StrToInt64Def(ListProcesses.Text[Node, ListProcesses.Header.MainColumn], 0);
// Don't kill own process // Don't kill own process
if pid = IntToStr(Conn.ThreadId) then if pid = Conn.ThreadId then
LogSQL(f_('Ignoring own process id #%s when trying to kill it.', [pid])) LogSQL(f_('Ignoring own process id #%d when trying to kill it.', [pid]))
else try else try
Conn.Query('KILL '+pid); Conn.Query(Format(Conn.GetSQLSpecifity(spKillProcess), [pid]));
except except
on E:EDatabaseError do begin on E:EDatabaseError do begin
if Conn.LastErrorCode <> 1094 then if Conn.LastErrorCode <> 1094 then