Эта ошибка возникает как взаимодействие между конкретным клиентом, используемым для подключения к серверу, и формой функции.Для иллюстрации:
Следующий код будет работать без сбоев в Netbeans 7, Squirrel, DbSchema, PgAdmin3
CREATE OR REPLACE FUNCTION author.revision_number()
RETURNS trigger AS
$BODY$
begin
new.rev := new.rev + 1;
new.revised := current_timestamp;
return new;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Обратите внимание, что оператор begin начинается сразу после цитируемого символа $string.
Следующий код остановит всех вышеперечисленных клиентов, кроме PgAdmin3.
CREATE OR REPLACE FUNCTION author.word_count()
RETURNS trigger AS
$BODY$
declare
wordcount integer := 0; -- counter for words
indexer integer := 1; -- position in the whole string
charac char(1); -- the first character of the word
prevcharac char(1);
begin
while indexer <= length(new.blab) loop
charac := substring(new.blab,indexer,1); -- first character of string
if indexer = 1 then
prevcharac := ' '; -- absolute start of counting
else
prevcharac := substring(new.blab, indexer - 1, 1); -- indexer has increased
end if;
if prevcharac = ' ' and charac != ' ' then
wordcount := wordcount + 1;
end if;
indexer := indexer + 1;
end loop;
new.words := wordcount;
return new;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Важнейшим отличием во втором примере является раздел «объявлять».Уловка использования обратной косой черты вызывает ошибку с PgAdmin3.
В заключение я предлагаю попробовать различные инструменты.Некоторые инструменты, даже если предполагается, что они пишут текстовые файлы, помещают в текст невидимые элементы.Общеизвестно, что это происходит с Unicode BOM, который остановит любой php-файл, который пытается реализовать сеансы или пространства имен.Хотя это не решение, я надеюсь, что это поможет.