Я использую Postgres 8.4 и я попытался запустить create function ...
скрипт из командной строки с помощьюНевозможно создать plpgsql функцию с помощью Psql -f имя_файла вариант
psql dbname -U username -f filename
или
psql -f filename -d dbname -U username
и это всегда приводит к следующей погрешности:
psql:mergenodedata.sql:40: ERROR: syntax error at or near "create" LINE 1: create or replace FUNCTION updNode (oldnodename varchar, ne...
где строка 40 является концом файла
$$ LANGUAGE plpgsql;
Если я вырезал содержимое файла и-вставки файла в pgadmin или открытой сессии Psql, то create function
будет отлично.
Код
create or replace FUNCTION updNode (oldnodename varchar, newnodename varchar, scnname varchar, cid integer) returns void AS $$
declare
oldnodeid integer;
newnodeid integer;
scnid integer;
newcount integer;
oldcount integer;
BEGIN
raise notice 'doing %', oldnodename;
select id from nodes where nodename = oldnodename and cityid = cid into oldnodeid;
select id from nodes where nodename = newnodename and cityid = cid into newnodeid;
select id from scenario where name = scnname and cityid = cid into scnid;
raise notice 'oldnodeid is %', oldnodeid;
raise notice 'newnodeid is %', newnodeid;
raise notice 'scnid is %', scnid;
select count(*) from collection_node_result where node1id = newnodeid and scenario_collection_id in (
select id from scenario_collection where scenarioid = scnid into newcount
);
raise notice 'newcount is %', newcount;
select count(*) from collection_node_result where node1id = oldnodeid and scenario_collection_id in (
select id from scenario_collection where scenarioid = scnid into oldcount
);
raise notice 'oldcount is %', oldcount;
update collection_node_result set node1id = newnodeid where node1id = oldnodeid and scenario_collection_id in (
select id from scenario_collection where scenarioid = scnid
);
END;
$$ LANGUAGE plpgsql;
Другие страницы я refernced являются
Run plpgsql program to update the data in table
http://www.postgresql.org/docs/8.4/static/plpgsql-development-tips.html
Несвязанный интересный факт: как, честно говоря, мое единственное желание прямо сейчас - сделать этот счетчик дней «легендарного значка» ... Я забыл: этот счетчик переключается, как только у вас есть +200 из * ничего * на заданный день. И этот один вопрос, который был удален ... все еще появляется с +40 ... -40. Таким образом, эти 4 upvotes все еще способствовали 1490 году. – GhostCat