PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

ГРЕШКА:функциите в индексния израз трябва да бъдат маркирани като НЕИЗМЕНИМИ в Postgres

Според тази тема в пощенския списък на хакерите:

http://www.mail-archive.com/[email protected]/msg86725.html

това е предвидено поведение като to_char зависи от настройката LC_MESSAGES

Във вашия случай това очевидно няма смисъл, тъй като форматът, който използвате, никога няма да зависи от локала, така че ако трябва да използвате текстовото представяне в индекса, можете да създадете своя собствена функция to_char() и да я маркирате като неизменно:

CREATE OR REPLACE FUNCTION my_to_char(some_time timestamp) 
  RETURNS text
AS
$BODY$
    select to_char($1, 'yyyy-mm-dd');
$BODY$
LANGUAGE sql
IMMUTABLE;

Ако трябва да го използвате като текст в индекса (и не можете да използвате прехвърлянето към дата, както Сам предложи), ще трябва да създадете своя собствена функция за форматиране, която можете да маркирате като неизменна. След това може да се използва в индекса.

Но за да накарате Postgre да използва индексът, който ще трябва да извикате my_to_char() и във вашите SQL изрази. Той няма да го разпознае, когато използвате вградения to_char()

Но мисля, че предложението на Сам да използва директна дата в индекса вероятно е по-добро



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql мигрира JSON към JSONB

  2. Проверете дали NULL съществува в Postgres масива

  3. Управление на роли и атрибути на роли в PostgreSQL

  4. Как да направя заявка, използвайки полета в новия PostgreSQL JSON тип данни?

  5. Управлявайте обединяването на връзки в уеб приложение с множество наематели с Spring, Hibernate и C3P0