Cette erreur est due à une interaction entre le client particulier utilisé pour se connecter au serveur et la forme de la fonction. Pour illustrer :
Le code suivant s'exécutera sans dommage dans Netbeans 7, Squirrel, DbSchema et 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;
Veuillez noter que l'instruction "begin" vient immédiatement après la chaîne de caractères citée "$".
Le code suivant arrêtera tous les clients ci-dessus sauf 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;
La différence essentielle dans le deuxième exemple est la section "declare". L'utilisation de barres obliques inversées provoque une erreur dans PgAdmin3.
En résumé, je suggère d'essayer différents outils. Certains outils, même s'ils sont censés écrire des fichiers texte, insèrent des éléments invisibles dans le texte. C'est notamment le cas de la nomenclature Unicode, qui bloque tout fichier php qui tente d'implémenter des sessions ou des espaces de noms. Bien que ce ne soit pas une solution, j'espère que cela vous aidera.