testsize() RETURNS integer AS $$
DECLARE
i integer;
BEGIN
create table testind (id serial, test int);
FOR i IN 1..65000 LOOP
INSERT INTO testind(test) values (i);
END LOOP;
create index indtest on testind(test);
raise info '%', (select pg_size_pretty (pg_relation_size('indtest')));
FOR i IN 1..65000 LOOP
if ( (i % 2) = 0) THEN delete from testind where id = i; END IF;
END LOOP;
FOR i IN 1..65000 LOOP
INSERT INTO testind(test) values (i);
END LOOP;
raise info '%', (select pg_size_pretty (pg_relation_size('indtest')));
drop table testind;
END;
$$ LANGUAGE plpgsql;
ни у кого пж не запущен, запустить, проверить?
FOR i IN 1..65000 LOOP if ( (i % 2) = 0) THEN delete from testind where id = i; END IF; END LOOP; Вот сюда добавьте else continue; перед END IF;
Скорее просто медленно работает. Проверьте на сотне, невелика проблема.
более чем странно, что сняв функцию обнаруживаю удалённую таблицу. Может он отработал, но после первого показа размера индекса чего то ждёт от меня? Ентер не помогает.
Не вижу ничего странного -- таблица создаётся в первой строке вообще.
точно вы правы, медленно работает. Сделал для 10 и отработало select * from testsize(); ИНФОРМАЦИЯ: 16 kB ИНФОРМАЦИЯ: 1440 kB ОШИБКА: конец функции достигнут без RETURN КОНТЕКСТ: функция PL/pgSQL testsize() из чего два вывода. 1. Индекс растёт в размере. Также как в 9 версии. То есть куренси индекс нужен как правка "багов" типа базы данных, как у постгрес. Все индексы растут в размере и их необходимо пересоздавать постоянно, отслеживая размер. 2. фигасе как медленно работает! Всего 65 тысяч инт. Неудевительно, что в пж всё такое медленное. Как так, что я ваще могу делать не правильно по скорости???
Ваш анализ — говно. Совсем. Это дажэ безсмысленно обсуждать.
не обсуждайте, кто вам не даёт, материтесь в углу один как бука.
И да, как нормально писать такие действия — я написал в том ответе вам, от которого сначала только begin запостился.
Обсуждают сегодня