मैं पीएल/पीजीएसक्यूएल में एक फ़ंक्शन लिख रहा हूं, और मैं यह जांचने का सबसे आसान तरीका ढूंढ रहा हूं कि कोई पंक्ति मौजूद है या नहीं।
अभी मैं integer
को boolean
में चुन रहा हूं, जो वास्तव में काम नहीं करता है। मुझे पीएल/पीजीएसक्यूएल के साथ पर्याप्त अनुभव नहीं हुआ है, यह अभी तक करने का सबसे अच्छा तरीका है।पीएल/पीजीएसक्यूएल जांच अगर कोई पंक्ति मौजूद है
यहाँ मेरी समारोह का हिस्सा है:
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;
अद्यतन - मैं अब के लिए कुछ इस तरह कर रहा हूँ:
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;
अच्छा बिंदु! (हालांकि person_id शायद प्राथमिक कुंजी है, इसलिए यह इंडेक्स लुकअप का उपयोग करके केवल एक ही तालिका को "स्कैन" करेगा)। –
@a_horse_with_no_name: अभी तक (पोस्टग्रेज़ 9.1) 'गिनती()' * हमेशा * अनुक्रमिक स्कैन ट्रिगर करता है। 'किसी भी तालिका के साथ tbl' से एक्सप्लान विश्लेषण चयन गिनती (आईडी) का प्रयास करें। पोस्टग्रेस विकी में धीमी गिनती पर अधिक (http://wiki.postgresql.org/wiki/Slow_Counting)। पोस्टग्रेस 9.2 का नया इंडेक्स-स्कैन स्कैन चीजों को बेहतर बनाने के लिए माना जाता है, क्योंकि यह (गिनती (आईडी) 'के लिए इंडेक्स स्कैन का उपयोग कर सकता है (हालांकि कुछ स्थितियां) - अभी तक कोशिश करने और इसे अपने लिए देखने के लिए नहीं है, हालांकि .. –
ए 'गिनती (*)' * एक शर्त के साथ * (विशेष रूप से पीके कॉलम पर नहीं) ** ** अनुक्रमिक स्कैन ट्रिगर नहीं करेगा **। –