9.3 और ऊपर:पार्श्व क्वेरी
PostgreSQL 9.3 या नए में एक अंतर्निहित पार्श्व क्वेरी का उपयोग करें:
SELECT f.* FROM things t, some_function(t.thing_id) f;
सभी नई क्वेरी . के लिए इस फॉर्मूलेशन को प्राथमिकता दें . उपरोक्त मानक सूत्रीकरण . है ।
यह उन कार्यों के साथ भी ठीक से काम करता है जो RETURNS TABLE
या RETURNS SETOF RECORD
साथ ही आउट-पैरा के साथ काम करता है जो RETURNS RECORD
।
यह इसके लिए आशुलिपि है:
SELECT f.*
FROM things t
CROSS JOIN LATERAL some_function(t.thing_id) f;
पूर्व-9.3:वाइल्डकार्ड विस्तार (सावधानी से)
पिछले संस्करण, some_function
. के बहु-मूल्यांकन का कारण बनते हैं , नहीं . करता है काम अगर some_function
एक सेट देता है, इसका उपयोग न करें :
SELECT (some_function(thing_id)).* FROM things;
पिछले संस्करण, some_function
. के बहु-मूल्यांकन से बचाते हैं अप्रत्यक्ष की दूसरी परत का उपयोग करना। इसका उपयोग केवल तभी करें जब आपको PostgreSQL के काफी पुराने संस्करणों का समर्थन करना चाहिए।
SELECT (f).*
FROM (
SELECT some_function(thing_id) f
FROM things
) sub(f);
डेमो:
सेटअप:
CREATE FUNCTION some_function(i IN integer, x OUT integer, y OUT text, z OUT text) RETURNS record LANGUAGE plpgsql AS $$
BEGIN
RAISE NOTICE 'evaluated with %',i;
x := i;
y := i::text;
z := 'dummy';
RETURN;
END;
$$;
create table things(thing_id integer);
insert into things(thing_id) values (1),(2),(3);
टेस्ट रन:
demo=> SELECT f.* FROM things t, some_function(t.thing_id) f;
NOTICE: evaluated with 1
NOTICE: evaluated with 2
NOTICE: evaluated with 3
x | y | z
---+---+-------
1 | 1 | dummy
2 | 2 | dummy
3 | 3 | dummy
(3 rows)
demo=> SELECT (some_function(thing_id)).* FROM things;
NOTICE: evaluated with 1
NOTICE: evaluated with 1
NOTICE: evaluated with 1
NOTICE: evaluated with 2
NOTICE: evaluated with 2
NOTICE: evaluated with 2
NOTICE: evaluated with 3
NOTICE: evaluated with 3
NOTICE: evaluated with 3
x | y | z
---+---+-------
1 | 1 | dummy
2 | 2 | dummy
3 | 3 | dummy
(3 rows)
demo=> SELECT (f).*
FROM (
SELECT some_function(thing_id) f
FROM things
) sub(f);
NOTICE: evaluated with 1
NOTICE: evaluated with 2
NOTICE: evaluated with 3
x | y | z
---+---+-------
1 | 1 | dummy
2 | 2 | dummy
3 | 3 | dummy
(3 rows)