समस्या यह है कि आप एक पैरामीटर पास कर रहे हैं (db_row
) प्रकार का record
SQL कथन के लिए, लेकिन ऐसे मान में SQL इंजन के लिए कोई ज्ञात संरचना नहीं है। आप इसे तालिका प्रकार में भी नहीं डाल सकते हैं।
एक बदसूरत कामकाज मैं इसके बारे में सोच सकता हूं कि रिकॉर्ड को इसके टेक्स्ट प्रस्तुतिकरण (जो टाइप आउटपुट फ़ंक्शन के लिए कॉल के साथ काम करता है) और फिर वांछित तालिका प्रकार पर परीक्षण डालें।
यह नमूना कोड है जो दर्शाता है कि मेरा क्या मतलब है:
DO $$
DECLARE
r record;
n name;
BEGIN
/* find all tables with a column "oid" */
FOR r IN
SELECT t.*
FROM pg_class t
JOIN pg_attribute a ON a.attrelid = t.oid
WHERE a.attname = 'oid'
LOOP
/* get the table name */
EXECUTE format(
'SELECT ($1::text::%s).relname',
'pg_class'
) INTO n USING r;
RAISE NOTICE 'Table name: %', n;
END LOOP;
END;
$$;