powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PL/Python function in index expression
3 сообщений из 3, страница 1 из 1
PL/Python function in index expression
    #33415407
EP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EP
Гость
Здравствуйте!

Имею Linux, PostgreSQL 8.1, Python 2.3

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
test=# create table t1(name varchar( 10 ), value integer);
CREATE TABLE
test=# create or replace function f1(integer) returns integer as $$
test$# file = open('/tmp/f1.log', 'a')
test$# file.write('log\n')
test$# file.close
test$# return args[ 0 ]+ 1 
test$# $$ language plpythonu immutable;
CREATE FUNCTION
test=# select name, f1(value) from t1;
 name | f1 
------+----
 r1   |   2 
 r2   |   3 
(записей:  2 )

После этого заглядываю в /tmp/f1.log - там, как и ожидалось, 2 строчки с log

Код: plaintext
1.
2.
test=# create index i1 on t1 (f1(value));
CREATE INDEX

После этого в /tmp/f1.log появляются еще 2 строчки с log - логично, нужно же было как-то посчитать значения индекса

Код: plaintext
1.
2.
3.
4.
5.
6.
test=# select name, f1(value) from t1;
 name | f1 
------+----
 r1   |   2 
 r2   |   3 
(записей:  2 )

И вот после этого в /tmp/f1.log появляются еще 2 строчки с log - почему? Ведь у СУБД есть индекс, зачения выражения известны, следовательно вызывать функцию не требуется. А она вызывается.

Это баг? Или так положено? Или где-то настраивается?
...
Рейтинг: 0 / 0
PL/Python function in index expression
    #33416174
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На маленькой таблице seq scan скорее всего идёт. Индекс не используется => функция вычисляется на каждую строку. К сожалению невозможно приписать функции большую стоимость, хотя бы с потолка, чтобы оптимизатор подпихнуть к использованию индекса. Надо смотреть на реальных данных, поиграться с enable_seqscan=false. Можно добавить поле с обычным индексом и вычислять его триггером.
...
Рейтинг: 0 / 0
PL/Python function in index expression
    #33416715
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и не использует PostgreSQL значения из индекса для результата, только во время поиска.
Зато не блокировочник.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PL/Python function in index expression
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]