в некторых случаях используются регулярные выражения. Как составлять регулярные выражения в постгресе?
У тебя же автоматом будет минус индекс... Тебе это точно надо? Это можно применять только как дополнительные фильтры на уже отфильтрованных данных, типа до 5тыщ записей макс.
Как составлять — как в Perl, или Python. это одна и та же "реализация".
мне нужно сделать поиск по словам, игнорируя тире и регистр
Не обязательно. Но индексация для regexp работает "как повезёт", это да.
А это просто неправильно. Реализация в PostgreSQL совершенно другая.
Эм.... ты можешь привести пример, когда повезёт?
Я поэтому поместил "реализация" в кавычки. Не нашёл нужного слова. СПЕЦИФИКАЦИЯ. надо было так
Прочитайте документацию по regexp (актуальной версии), да и делайте, в чём проблема? Индексировать это — другое дело.
И тоже нет. ;) В PostgreSQL отличается синтаксис, и другие возможности и ограничения ("базовая" часть должна примерно совпадать, конечно).
и что, там не Perl extended?
Ну вот, например: EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM search_fulltext_products WHERE product_text ~ 'CB7.*mcv' Без индекса: Seq Scan on search_fulltext_products (cost=0.00..123934.00 rows=100 width=180) (actual time=989.682..989.682 rows=0 loops=1) Filter: (product_text ~ 'CB7.*mcv'::text) Rows Removed by Filter: 1010000 Buffers: shared hit=2070 read=18339 I/O Timings: read=24.640 Planning Time: 4.880 ms Execution Time: 989.694 ms С индексом: Bitmap Heap Scan on search_fulltext_products (cost=11.78..131.33 rows=100 width=180) (actual time=0.229..0.230 rows=0 loops=1) Recheck Cond: (product_text ~ 'CB7.*mcv'::text) Rows Removed by Index Recheck: 7 Heap Blocks: exact=7 Buffers: shared hit=16 -> Bitmap Index Scan on products_trgm_idx (cost=0.00..11.75 rows=100 width=0) (actual time=0.203..0.203 rows=7 loops=1) Index Cond: (product_text ~ 'CB7.*mcv'::text) Buffers: shared hit=9 Planning Time: 1.947 ms Execution Time: 0.244 ms
Нет, там свой движок.
POSIX же... https://www.postgresql.org/docs/13/functions-matching.html#FUNCTIONS-POSIX-REGEXP
PCRE — это вообще не POSIX.
Да, ты прав. Ну ок
Обсуждают сегодня