[sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite

Поиск
Список
Период
Сортировка
От Andreas Seltenreich
Тема [sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite
Дата
Msg-id 8760oasf2y.fsf@credativ.de
обсуждение исходный текст
Ответы Re: [sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hi,

testing with sqlsmith yielded an uncancellable backend hogging CPU time.
Gdb showed it was busy in findeq() of tsquery_rewrite.c.  This function
appears to have exponential complexity wrt. the size of the involved
tsqueries.  The following query runs for 12s on my machine with no way
to cancel it and incrementing the length of the first argument by 1
doubles this time.

select ts_rewrite(
  (select string_agg(i::text, '&')::tsquery from generate_series(1,32) g(i)),
  (select string_agg(i::text, '&')::tsquery from generate_series(1,19) g(i)),
  'foo');

The attached patch adds a CHECK_FOR_INTERRUPTS to make it cancellable.

regards,
Andreas


Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Jim Nasby
Дата:
Сообщение: Re: make coverage-html on OS X
Следующее
От: Michael Paquier
Дата:
Сообщение: Re: Mention column name in error messages