ver tutorial programacion postgres funciones for create body sql postgresql plpgsql postgresql-9.1 exists

tutorial - PL/pgSQL comprobando si existe una fila



programacion en postgresql (2)

Más simple, más corto, más rápido: EXISTS .

IF EXISTS (SELECT 1 FROM people WHERE person_id = my_person_id) THEN -- do something END IF;

El planificador de consultas puede detenerse en la primera fila encontrada, a diferencia de count() , que analizará todas las filas coincidentes independientemente. Hace una diferencia con las mesas grandes. Apenas importa una condición en una columna única: solo una fila califica de todos modos (y hay un índice para buscarla rápidamente).

Mejorado con la entrada de @a_horse_with_no_name en los comentarios a continuación.

Estoy escribiendo una función en PL / pgSQL, y estoy buscando la forma más sencilla de verificar si existe una fila.
En este momento estoy SELECCIONANDO un integer en un boolean , que realmente no funciona. Todavía no tengo experiencia con PL / pgSQL para saber la mejor manera de hacerlo.

Aquí hay parte de mi función:

DECLARE person_exists boolean; BEGIN person_exists := FALSE; SELECT "person_id" INTO person_exists FROM "people" p WHERE p.person_id = my_person_id LIMIT 1; IF person_exists THEN -- Do something END IF; END; $$ LANGUAGE plpgsql;

Actualización : estoy haciendo algo como esto por ahora:

DECLARE person_exists integer; BEGIN person_exists := 0; SELECT count("person_id") INTO person_exists FROM "people" p WHERE p.person_id = my_person_id LIMIT 1; IF person_exists < 1 THEN -- Do something END IF;


Usar recuento (*)

declare cnt integer; begin SELECT count(*) INTO cnt FROM people WHERE person_id = my_person_id; IF cnt > 0 THEN -- Do something END IF;

Editar (para el infractor que no leyó la declaración y otros que podrían estar haciendo algo similar)

La solución solo es efectiva porque hay una cláusula where en una columna (y el nombre de la columna sugiere que es la clave principal, por lo que la cláusula where es altamente efectiva)

Debido a esa cláusula where no es necesario usar un LIMIT o alguna otra cosa para probar la presencia de una fila identificada por su clave principal. Es una forma efectiva de probar esto.