URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7373
[ Назад ]

Исходное сообщение
"pgsql trigger"

Отправлено oppofan , 20-Май-08 17:30 
думал, думал... спрошу полностью, полностью же опозорившись :-)
есть база данных под pgsql, а в ней таблица, в которой список пользователей...
есть ещё пара таблиц, в которые надо при занесении нового пользователя заносить его id.
активируем plpgsql
$createlang plpgsql dbname
потом делаем функцию:
CREATE OR REPLACE FUNCTION fn_add_services(int4) RETURNS int4 AS'
    declare
    id_user int4;
    begin
    id_user:=users_id_seq.start;
    insert into proxy(user_id,allow,current,quote,login,password,base_quote) values(id_user,"f",0,0,"","",52428800);
    insert into mail_users(user_id,allow,login,password) values(id_user,"f","","");
    end;
'LANGUAGE 'plpgsql';

затем триггер:
create trigger tg_add_user after insert
on users for each row
execute procedure fn_add_services();

а оно ругается:
ERROR:  function fn_add_services() does not exist
хотя функция в списке присутствует...
ткните носом в ответ или доку, тока поконкретнее - а то ничего не нашёл...
ээх :-)


Содержание

Сообщения в этом обсуждении
"pgsql trigger"
Отправлено pavel_simple , 20-Май-08 17:56 
разное количество параметров -- 0 и 1
а зачем такой изврат --пишите сразу триггер


"pgsql trigger"
Отправлено oppofan , 20-Май-08 18:03 
>разное количество параметров -- 0 и 1
>а зачем такой изврат --пишите сразу триггер

:-( я по старенькой книжке делаю... там так написано... и она на русском :-(

create trigger tg_add_user after insert on users for each row execute procedure fn_add_services(int4);
так то-же самое... где-то туплю...

Да... FreeBSD 6.1, PGSQL 8.2.1


"pgsql trigger"
Отправлено pavel_simple , 20-Май-08 18:18 
>[оверквотинг удален]
>>а зачем такой изврат --пишите сразу триггер
>
>:-( я по старенькой книжке делаю... там так написано... и она на
>русском :-(
>
>create trigger tg_add_user after insert on users for each row execute procedure
>fn_add_services(int4);
>так то-же самое... где-то туплю...
>
>Да... FreeBSD 6.1, PGSQL 8.2.1

не заметил сразу -- return type должен быть trigger -- а вообще -- учить лучше не по старенькой книге а по http://www.postgresql.org/docs/8.2/static/index.html


"pgsql trigger"
Отправлено oppofan , 20-Май-08 19:13 
Заработало! Спасибо тебе, добрый человек!

CREATE OR REPLACE FUNCTION fn_add_services()
  RETURNS trigger AS $fn_add_services$
    declare
    id_user int8;
    begin
        id_user := currval('users_id_seq');
        insert into proxy(user_id,allow,current,quote,login,password,base_quote) values(id_user,'f',0,0,'','',52428800);
        insert into mail_users(user_id,allow,login,password) values(id_user,'f','','');
    return NULL;
    end;
$fn_add_services$ LANGUAGE plpgsql;


create trigger tg_add_user after insert on users for each row execute procedure fn_add_services();

Мораль - читайте доки не какие нашли, а к нужной версии :-)