PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Para que serve '$$' em PL/pgSQL


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.