PL/pgSQL'de bir işlev yazıyorum ve bir satır olup olmadığını kontrol etmenin en kolay yolunu arıyorum.
Şu anda bir integer
SELECT, bir boolean
, gerçekten çalışmıyor. Bunu yapmanın en iyi yolunu bilecek kadar PL/pgSQL ile yaşamadım.PL/pgSQL bir satır mevcut olup olmadığını kontrol etme
İşte benim işlevinin parçası:
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;
Güncelleme - şimdilik böyle bir şey yapıyorum:
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;
İyi nokta! (Person_id muhtemelen birincil anahtar olmasına rağmen, bu nedenle sadece bir dizin araması kullanarak tek bir tabloyu "tarar". –
@a_horse_with_no_name: Şu an itibariyle (Postgres 9.1) 'count()' * her zaman * sıralı bir taramayı tetikler. Herhangi bir tablo ile tPL'den ANALİZ SEÇİMİ seçimini (id) deneyin. Daha fazlası [Postgres Wiki'de yavaş sayma] (http://wiki.postgresql.org/wiki/Slow_Counting). Postgres 9.2'nin yeni sadece dizin taraması bazı şeyleri geliştirmesi gerekiyordu, çünkü (bazı koşullar sağlanmışsa) "sayım (id)" için bir indeks taraması kullanabiliyordu - yine de bunu kendi başıma denemek ve görmek zorunda kaldım .. –
A 'koşullu * (*) * ile * (özellikle PK sütununda değil) ** sıralı bir taramayı tetiklemez. –