Estou usando este comando para criar índice no PostgreSQL 13:
CREATE INDEX dict_word_idx ON dict (word);
mas agora o sql é executado por mais de 12 horas, não tenho certeza se o sql ainda está funcionando ou algo assim. Eu uso este comando para mostrar o sql em execução atual:
SELECT
procpid,
start,
now() - start AS lap,
current_query
FROM
(SELECT
backendid,
pg_stat_get_backend_pid(S.backendid) AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS start,
pg_stat_get_backend_activity(S.backendid) AS current_query
FROM
(SELECT pg_stat_get_backend_idset() AS backendid) AS S
) AS S
WHERE
current_query <> '<IDLE>'
ORDER BY
lap DESC;
mostra o resultado de criar índice assim:
1303 2021-10-04 09:24:27 13:12:49.940239 CREATE INDEX dict_word_idx ON dict (word);
mas pg_stat_progress_create_index
não mostra nada:
select *
from pg_stat_progress_create_index;
então tentei usar este sql para matar a tarefa de criação de índice:
SELECT pg_cancel_backend(1303);
Parece não funcionar, o comando create index ainda está lá. o que devo fazer para descobrir o que está acontecendo agora. O SQL ainda está ocupado rodando e devo esperar? o comando craeted index não deve ser morto assim? o que devo fazer para lidar adequadamente com essa situação e não fazer com que o banco de dados falhe no futuro.
Sua consulta de atividade atual é incrivelmente obsoleta. Desde a versão 9.2, o texto das consultas concluídas não é alterado para '<IDLE>', elas continuam a aparecer como o texto da consulta original. É lá
state
que é alterado para 'idle'.Portanto, provavelmente o que você está vendo é que a construção do índice já foi concluída.