आप गतिशील एसक्यूएल की तलाश में हैं। सिस्टम कैटलॉग से अपनी क्वेरी को स्वचालित रूप से इकट्ठा करें:
SELECT string_agg('SELECT student_name, '''
|| c.oid::regclass || ''' AS tbl, pid FROM '
|| c.oid::regclass
|| $$ WHERE student_name = 'John Doe'$$
, E'\nUNION ALL\n')
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
WHERE n.nspname = 'public' -- schema name where your tables lie
AND c.relname LIKE 't%' -- and / or filter table names
AND EXISTS (
SELECT 1 FROM pg_attribute
WHERE attrelid = c.oid
AND attname = 'student_name' -- make sure column exists
AND NOT attisdropped -- and is alive
);
क्वेरी स्ट्रिंग उत्पन्न करता है:
SELECT student_name, 'tbl1' AS tbl, pid FROM tbl1 WHERE student_name = 'John Doe'
UNION ALL
SELECT student_name, 'tbl2' AS tbl, pid FROM tbl2 WHERE student_name = 'John Doe'
UNION ALL
SELECT student_name, 'tbl3' AS tbl, pid FROM tbl3 WHERE student_name = 'John Doe'
...
फिर इसे दूसरी कॉल में चलाएं या EXECUTE
का उपयोग करके इसे PL/pgSQL फ़ंक्शन के साथ पूरी तरह से स्वचालित करें . उदाहरण:
किसी तालिका से स्तंभों का एक गतिशील सेट चुनें और प्रत्येक के लिए योग प्राप्त करें
यह क्वेरी सुरक्षित . उत्पन्न करती है SQL इंजेक्शन को रोकने वाले सैनिटाइज्ड आइडेंटिफ़ायर वाला कोड। (oid::regclass
. के लिए स्पष्टीकरण यहाँ।)
अधिक संबंधित उत्तर हैं। खोज का उपयोग करें।
बीटीडब्ल्यू, LIKE
in student_name LIKE 'John Doe'
व्यर्थ है। वाइल्डकार्ड के बिना, बस =
का उपयोग करें ।