sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:compruebe que existe una clave externa al hacer una SELECCIÓN

Puede explotar una característica de PL/pgSQL para implementar esto muy barato :

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; final es opcional en este caso.

La WARNING solo se genera si su consulta no devuelve ninguna fila. No estoy generando un ERROR en el ejemplo, ya que esto revertiría toda la transacción (pero puede hacerlo si se ajusta a sus necesidades).

Hemos agregado un ejemplo de código al manual con Postgres 9.3 para demostrar esto.