Ces signes dollar ($$
) sont utilisés pour les cotations en dollars , qui n'est en aucun cas spécifique aux définitions de fonction . Il peut être utilisé pour remplacer les guillemets simples entourant des littéraux de chaîne (constantes) n'importe où dans les scripts SQL.
Le corps d'une fonction se trouve être un tel littéral de chaîne. Dollar-quoting est un substitut spécifique à PostgreSQL pour les guillemets simples afin d'éviter l'échappement des guillemets simples imbriqués (récursivement). Vous pouvez également placer le corps de la fonction entre guillemets simples. Mais alors vous devrez échapper tous les guillemets simples dans le corps :
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
'
BEGIN
IF NOT $1 ~ e''^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$'' THEN
RAISE EXCEPTION ''Malformed string "%". Expected format is +999 999'';
END IF;
RETURN true;
END
';
Ce n'est pas une si bonne idée. Utilisez plutôt des guillemets en dollars. Plus précisément, mettez également un jeton entre les $$
pour rendre chaque paire unique - vous pouvez utiliser des guillemets en dollars imbriqués dans le corps de la fonction. Je le fais souvent, en fait.
CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Voir :
- Insérer du texte avec des guillemets simples dans PostgreSQL
Quant à votre deuxième question :
Lisez l'excellent manuel sur CREATE FUNCTION
pour comprendre la dernière ligne de votre exemple.