Estes cifrões (
$$
) são usados para cotações em dólares , que não é específico para definições de função . Ele pode ser usado para substituir aspas simples envolvendo literais de string (constantes) em qualquer lugar em scripts SQL. O corpo de uma função é um literal de string. A cotação do dólar é um substituto específico do PostgreSQL para aspas simples para evitar o escape de aspas simples aninhadas (recursivamente). Você também pode colocar o corpo da função entre aspas simples. Mas então você teria que escapar de todas as aspas simples no corpo:
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
';
Esta não é uma boa ideia. Use cotações de dólares em vez disso. Mais especificamente, coloque também um token entre o
$$
para tornar cada par único - você pode querer usar cotações de dólar aninhadas dentro do corpo da função. Eu faço muito isso, na verdade. CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean
LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
...
END
$func$;
Ver:
- Inserir texto com aspas simples no PostgreSQL
Quanto à sua segunda pergunta:
Leia o manual mais excelente sobre
CREATE FUNCTION
para entender a última linha do seu exemplo.