ОШИБКА: функции в выражении индекса должны быть помечены как IMMUTABLE в Postgres

Прежде всего я думаю, что уже были некоторые большие ответы, таким образом, я попытаюсь не обмануть слишком много.

  • Заставляют их писать много кода, сохранять их задающий вопросы для хранения мозгового течения соков.
  • я сказал бы, не увязают с действительно подробная информация, пока они или выполненный в к последствиям их, или они не спрашивают.

я думаю одна из самых больших точек, которые я гарантировал бы, то, что они понимают базовое понятие платформы. Я знаю, что Вы работаете в Python (который у меня нет подсказки о), но например, с ASP.NET, заставляя людей понять, что страница/код позади модели может быть реальной проблемой, но очень важный , что они понимают его. Как пример, у меня недавно был вопрос на форуме о" , куда я помещаю свой код доступа к данным в 'cs' файле или 'aspx' файле ".

, Таким образом, я сказал бы, по большей части, позволяют им вести путь, просто быть там, чтобы поддерживать их при необходимости и запросить больше вопросов поддержать интерес. Просто удостоверьтесь, чтобы они имели основные принципы вниз и не позволяли им работать, прежде чем они смогут идти.

Удачи!

20
задан halfer 16 June 2015 в 19:58
поделиться

1 ответ

Согласно этой теме в списке рассылки хакеров:

http://www.mail-archive.com/pgsql-hackers@postgresql.org/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;

Если вам нужно использовать его как текст в индексе (и вы не можете использовать приведение к дате, как предложил Сэм), вам нужно создать собственную функцию форматирования, которую вы можете пометить как неизменную. Это может быть использовано в индексе.

Но чтобы Postgres использовал индекс, вам нужно будет также вызвать my_to_char() в ваших инструкциях SQL. Он не распознает его, когда вы используете встроенный to_char()

Но я думаю, что предложение Сэма с использованием прямой даты в индексе, вероятно, лучше

21
ответ дан 30 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: