выражение с gist/gin индексом, то если оно, например, находится в case стейтменте, то к индексу обращения нет, например:
                  
                  
                  
                  
                  
                  select ... from ... where foo @> bar - тут индекс для bar работает
                  
                  
                  select ... from ... where case when baz then true else foo @> bar end - тут не работает
                  
                  
                  
                  
                  
                  Я же правильно понимаю, что это особенности самих инвертированных индексов? Как "идиоматично" решать подобные проблемы? .-.
                  
                  
                
 Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  если есть воркэраунд, то не страшно)
А что мешает превратить case в комбинацию логических условий?
 Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  имеется в ввиду or, and и так далее?
 Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  а можно пример?
Предлагаю сделать UNION Одна часть UNION where foo is null, вторая where foo is not null and condition(foo) Планировщик построит отдельный оптимальный план для каждой комбинации параметров. Второй вариант — вместо NULL передать такое значение параметра, для которого можно применить тот же план с индексом, и работает тот план быстро. Идиоматично — не делать так с параметрами.
 Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Yan
                          Shkurinskiy
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Спасибо большое) Я обдумаю А как идиоматично?
Обсуждают сегодня