diff options
author | Daniel Gustafsson <dgustafsson@postgresql.org> | 2022-09-05 11:10:57 +0200 |
---|---|---|
committer | Daniel Gustafsson <dgustafsson@postgresql.org> | 2022-09-05 11:10:57 +0200 |
commit | ae4fc52ae24785f51e3dc5a4c7e5b4d206356bdc (patch) | |
tree | f6cdfaa115f45e31693559b2994d55675e92df72 | |
parent | 519be095f2bf7150fe7a36c4f5cd0c1825126427 (diff) | |
download | postgresql-ae4fc52ae24785f51e3dc5a4c7e5b4d206356bdc.tar.gz postgresql-ae4fc52ae24785f51e3dc5a4c7e5b4d206356bdc.zip |
Check for interrupts in pg_trgm word similarity
Calculating similarity between large strings can be timesconsuming
and overrun configured statement timeouts. Check for interrupts in
the main loop to ensure query cancellation can be performed.
Author: Robins Tharakan <tharakan@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAEP4nAxvmfc_XWTz73bqXRhgjONi=1HaX4_NhsopA3L6UvnN1g@mail.gmail.com
-rw-r--r-- | contrib/pg_trgm/trgm_op.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/contrib/pg_trgm/trgm_op.c b/contrib/pg_trgm/trgm_op.c index 49b3609de93..c140fcdbbe8 100644 --- a/contrib/pg_trgm/trgm_op.c +++ b/contrib/pg_trgm/trgm_op.c @@ -7,6 +7,7 @@ #include "catalog/pg_type.h" #include "lib/qunique.h" +#include "miscadmin.h" #include "trgm.h" #include "tsearch/ts_locale.h" #include "utils/lsyscache.h" @@ -492,8 +493,12 @@ iterate_word_similarity(int *trg2indexes, for (i = 0; i < len2; i++) { + int trgindex; + + CHECK_FOR_INTERRUPTS(); + /* Get index of next trigram */ - int trgindex = trg2indexes[i]; + trgindex = trg2indexes[i]; /* Update last position of this trigram */ if (lower >= 0 || found[trgindex]) |