Scrivo una funzione in PL/pgSQL e sto cercando il modo più semplice per verificare se esiste una riga.
In questo momento sto selezionando uno integer
in un boolean
, che in realtà non funziona. Non ho ancora abbastanza esperienza con PL/pgSQL per conoscere il modo migliore per farlo.PL/pgSQL verifica se esiste una riga
Ecco parte della mia funzione:
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;
Aggiornamento - che sto facendo qualcosa di simile per la società:
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;
Buon punto! (Anche se person_id è probabilmente la chiave primaria, quindi farebbe solo una "scansione" di una singola tabella usando una ricerca di indice). –
@a_horse_with_no_name: A partire da ora (Postgres 9.1) 'count()' * sempre * attiva una scansione sequenziale. Prova 'EXPLAIN ANALYZE SELECT count (id) da tbl' con qualsiasi tabella. Altro su [conteggio lento nel Wiki di Postgres] (http://wiki.postgresql.org/wiki/Slow_Counting). La nuova scansione solo indice di Postgres 9.2 dovrebbe migliorare le cose, perché può (a patto che alcune condizioni) utilizzi una scansione indice per 'count (id)' - devono ancora provarlo e vederlo da solo, però .. –
A 'count (*)' * con una condizione * (specialmente non sulla colonna PK) ** non ** attiva una scansione sequenziale. –