PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:verifica che la chiave esterna esista quando esegui un SELECT

Puoi sfruttare una funzionalità di PL/pgSQL per implementare questo molto conveniente :

CREATE OR REPLACE FUNCTION f_select_from_some_tbl(int)
  RETURNS SETOF some_table AS
$func$
BEGIN
   RETURN QUERY
   SELECT * 
   FROM   some_table 
   WHERE  other_table_id = $1;

   IF NOT FOUND THEN
      RAISE WARNING 'Call with non-existing other_table_id >>%<<', $1;
   END IF;
END
$func$  LANGUAGE plpgsql;

Un RETURN; finale è facoltativo in questo caso.

Il WARNING viene generato solo se la query non restituisce alcuna riga. Non sto sollevando un ERROR nell'esempio, poiché ciò annullerebbe l'intera transazione (ma puoi farlo se soddisfa le tue esigenze).

Abbiamo aggiunto un esempio di codice al manuale con Postgres 9.3 per dimostrarlo.