Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Postgresql 8.2 CREATE UNIQUE INDEX dogovornumber2 ON contragentteplo USING btree (to_number(dogovor,'99999'), period_id); ERROR: фунции в идексном выражении должны быть помечены как IMMUTABLE Вопрос 1 Как фунции в идексном выражении должны быть пометить как IMMUTABLE ? PS В 8.1 все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 13:53 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Функция to_number теперь не IMMUTABLE. Пишите свою функцию или меняйте логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2007, 22:36 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Написал CREATE OR REPLACE FUNCTION to_number(character varying) RETURNS numeric AS $BODY$select to_number($1,'99999');$BODY$ LANGUAGE 'sql' IMMUTABLE; ALTER FUNCTION to_number(character varying) OWNER TO postgres; Создал индекс CREATE UNIQUE INDEX dogovornumber2 ON contragentteplo USING btree (to_number(dogovor), period_id); Но новая беда select * from contragentteplo where 12433=to_number(dogovor) индекс подключает select * from contragentteplo where 12433=to_number(dogovor,'99999') индекс не подключает что вообщем-то правильно НО у меня масса запрсов именно с to_number(dogovor,'99999') Как обхитрить Postgresql ? Как его заставить при to_number(dogovor,'99999') подключать индекс dogovornumber2 ? Неохота менять тексты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 22:45 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
slpНаписал CREATE OR REPLACE FUNCTION to_number(character varying) RETURNS numeric AS $BODY$select to_number($1,'99999');$BODY$ LANGUAGE 'sql' IMMUTABLE; ALTER FUNCTION to_number(character varying) OWNER TO postgres; Создал индекс CREATE UNIQUE INDEX dogovornumber2 ON contragentteplo USING btree (to_number(dogovor), period_id); Но новая беда select * from contragentteplo where 12433=to_number(dogovor) индекс подключает select * from contragentteplo where 12433=to_number(dogovor,'99999') индекс не подключает что вообщем-то правильно НО у меня масса запрсов именно с to_number(dogovor,'99999') Как обхитрить Postgresql ? Как его заставить при to_number(dogovor,'99999') подключать индекс dogovornumber2 ? Неохота менять тексты А ничего что это разные функции? То, что они одинаково называется еще не значит что одинаково работают Может так: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:36 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
почитай первый пост выдает фунции в идексном выражении должны быть помечены как IMMUTABLE в 8.2 в 8.1 работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:44 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Perederiyпочитай первый пост выдает Точно. Я чего-то перепутал, что этот тунумбер - самописный . Perederiy фунции в идексном выражении должны быть помечены как IMMUTABLE в 8.2 в 8.1 работает Т.е. есть куча уже работающих запросов, которые нельзя менять. И в них используется to_number(,)? Которая с 8.2 уже не IMMUTABLE. Возникла идея (проверить смогу в лучшем случае к вечеру) - может пересоздать эту функцию как IMMUTABLE. Если получится - будет прикольно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:55 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
тебе прикольно а мне как вспомню сколько надо менять - сразу резко плохеет ЗЫ Нафига было это менять в 8.2 ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 16:27 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Perederiyтебе прикольно а мне как вспомню сколько надо менять - сразу резко плохеет ЗЫ Нафига было это менять в 8.2 ??? Вроде краем уха видел - что там бывают проблемы из серии "если гад пользователь меняет локаль во время выполнения запроса". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 17:15 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Таки нашел. Код: plaintext 1. (C) дока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 17:39 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
и что из этого следует ? как практически поступить в моем случае ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 18:55 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
slpи что из этого следует ? как практически поступить в моем случае ? Хм. Я правильно подозреваю единость в двух лицах? Попробовать пересоздать функцию с указением того, что она IMMUTABLE. Если не поможет - то таки создавать свою функцию на эту тему, и по ней ваять индекс. Я других вариантов не вижу. Может гуру чего подскажут другого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 19:25 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Сидеть на 8.1 и не дергаться. Зачем переносить корректно работающую систему на новую версию? Вот начинать проекты да, лучше на 8.2 или 8.3 в зависимости от планируемого срока разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 01:39 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
у меня в дистрибутиве Linux - Mandriva Linux 2008 стоит по умолчанию 8.2. вообще-то изначально я писал под ASPLinux под Postgresql 7. Потом прошел путь до 8.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 08:14 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
MBGСидеть на 8.1 и не дергаться. Зачем переносить корректно работающую систему на новую версию? Вот начинать проекты да, лучше на 8.2 или 8.3 в зависимости от планируемого срока разработки. Ну, переносить - например из-за повышения производительности и надежности. Кроме того, судя по моей ссылке, на любой новой базе эта ошибка будет повторятся, ибо это был багфикс в 8.1.6 (и кста глубоко вниз до 7.3 кажется). предлогаемый Вами путь - вечно висеть на 8.1.5 для новых instance + апгрейд до текущей. Кривовато в общем. С другой стороны, если система в пром и на доработку ресурсы не выделяются (деньги, время и т.д.) то можно оставить и так. ЗЫ Придумал еще один "зверский" вариант. ВНИМАНИЕ! За последствия ОТВЕСТВЕННОСТИ НЕ НЕСУ И НЕ ХОЧУ НЕСТИ!!! Код: plaintext 1. ЗЗЫ Полезная вещь - исходники ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 10:05 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Короче поступил так CREATE OR REPLACE FUNCTION to_numberslp(character varying,character varying,) RETURNS numeric AS $BODY$select to_number($1,$2);$BODY$ LANGUAGE 'sql' IMMUTABLE; ALTER FUNCTION to_number(character varying,character varying) OWNER TO postgres; Создал индекс CREATE UNIQUE INDEX dogovornumber2 ON contragentteplo USING btree (to_numberslp(dogovor,'99999'), period_id); Дальше поменял в прогах to_number на to_numberslp. KFileReplace рулит !!! Запросы в отчетах пришлось менять вручную . Там их после этого надо перекомпилировать (я пользую iReport) . Благо их штук 15 всего оказалось. За полчаса справился. Сейчас тихо радуюсь. Но вот поделиться радостью не с кем. Многие в конторе считают что программирование сродни написанию текста в текстовом редакторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 12:29 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Perederiy... Многие в конторе считают что программирование сродни написанию текста в текстовом редакторе. А разве это не так? :) Что сложного в том, что вы сделали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 12:32 |
|
||
|
Как с этим бороться ?
|
|||
|---|---|---|---|
|
#18+
Это напоминает мне реальный случай рассказанный одним программером Он занимался проблемой распознавания рукописного текста Его мать - чем занимаешься сынок ? Программер - Пытаюсь научить компьютер распознавать написанный текст Мать - Так это каждый человек может !!! Вот те которые научили компьютер быстро складывать числа - это вот настоящие гении ! Человек так не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 12:44 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34952630&tid=2004843]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 417ms |

| 0 / 0 |
