Как выполнить подзапрос в инструкции select

#postgresql #plpgsql

Вопрос:

 SELECT pg_cancel_backend(SELECT pid
FROM pg_stat_activity
WHERE state not like 'idle%'
AND query NOT ILIKE '%pg_stat_activity%'
AND age(clock_timestamp(), query_start) > interval '600 minutes');
 

Код не работает

 SQL Error [42601]: ERROR: syntax error at or near "SELECT"
  Position: 26
 

Я просто хочу остановить некоторые внутренние процессы, которые застряли, и сделать это программно. У меня это есть в процедуре PLPGSQL.

Комментарии:

1. Заключите внутренний ВЫБОР внутрь () .

Ответ №1:

Вам не нужен внешний выбор:

 SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE state not like 'idle%'
AND query NOT ILIKE '%pg_stat_activity%'
AND age(clock_timestamp(), query_start) > interval '600 minutes';
 

Обратите внимание, что в процедуре PL/pgSQL вам нужно будет использовать perform вместо SELECT. Подробности см. в руководстве