PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL - Vérifier que la clé étrangère existe lors d'un SELECT

Vous pouvez exploiter une fonctionnalité de PL/pgSQL pour implémenter cela très bon marché :

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 dernier RETURN; est facultatif dans ce cas.

Le WARNING n'est déclenché que si votre requête ne renvoie aucune ligne. Je ne génère pas d'ERROR dans l'exemple, car cela annulerait toute la transaction (mais vous pouvez le faire si cela correspond à vos besoins).

Nous avons ajouté un exemple de code au manuel avec Postgres 9.3 pour le démontrer.