172 похожих чатов

Вопрос. Никто не может пояснить как вот этот код запустить в

psql? Вроде всё написал правильно, но он ругается на всё подряд. И я ещё ни одну функцию никогда не запускал.
CREATE FUNCTION 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);

select pg_size_pretty (pg_relation_size('indtest'));

FOR i IN 1..65000 LOOP
if ( (i % 2) == 0) delete from testind where id = i;
INSERT INTO testind(test) values (i);
END LOOP;

drop table testind;
END;
' LANGUAGE plpgsql;

select * from testsize();

7 ответов

35 просмотров

Во-первых, в function в postgres вообще не можэт быть commit. Во-вторых, на самом деле такое пишэтся как begin; insert into testind (test) (SELECT * FROM generate_series(1,65000)); commit; begin; delete from testind WHERE test IN (SELECT generate_series*2 FROM generate_series(1,32500)); commit; begin; insert into testind (test) (SELECT generate_series*2 FROM generate_series(1,32500)); commit;

ks- Автор вопроса
Ilya Anfimov
Во-первых, в function в postgres вообще не можэт б...

написано, что ошибка после begin ставить ;

Все ок, только у вас внутри задания тела функции через кавычки есть еще текстовое поле, которое так же в кавычках. Замените внешние кавычки задания функции на $$ CREATE FUNCTION 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); select pg_size_pretty (pg_relation_size('indtest')); FOR i IN 1..65000 LOOP if ( (i % 2) == 0) delete from testind where id = i; INSERT INTO testind(test) values (i); END LOOP; drop table testind; END; $$ LANGUAGE plpgsql;

ks
написано, что ошибка после begin ставить ;

Это я на <Enter> случайно нажал.

ks
написано, что ошибка после begin ставить ;

Тому що это у тебя не тот begin, который начинает транзакцыю, а ключевое слово языка PL/pgSQL. Которое ограничивает блок исполнения языка PL/pgSQL.

ks
написано, что ошибка после begin ставить ;

Но тут никакой PL нафиг не нужэн, да и функцыи тожэ.

ks- Автор вопроса
Ilya Anfimov
Во-первых, в function в postgres вообще не можэт б...

ваш вариант решил проблему со скоростью. Всё равно, фигасе какой язык plsql медленный, неожиданно. Сейчас более важно. select * from testsize(); ИНФОРМАЦИЯ: 1440 kB ИНФОРМАЦИЯ: 2856 kB testsize ---------- 0 (1 строка) Думаю код не надо новый?

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта