सही उत्तर एंटोन कोवलेंको की एक टिप्पणी है
आप कभी भी एम्बेडेड SQL में वेरिएबल को टेबल या कॉलम नाम के रूप में उपयोग नहीं कर सकते हैं।
UPDATE dynamic_table_name SET ....
PostgreSQL एम्बेडेड SQL के लिए एक तैयार और सहेजी गई योजनाओं का उपयोग करता है, और लक्ष्य वस्तुओं (तालिकाओं) के संदर्भ योजनाओं में गहरे और कठोर एन्कोडेड होते हैं - कुछ विशेषताओं का योजनाओं पर महत्वपूर्ण प्रभाव पड़ता है - एक तालिका के लिए इंडेक्स का उपयोग किया जा सकता है, अन्य के लिए नहीं। क्वेरी योजना अपेक्षाकृत धीमी है, इसलिए PostgreSQL इसे पारदर्शी रूप से (कुछ अपवादों के बिना) आज़माता नहीं है।
आपको एक डायनामिक SQL का उपयोग करना चाहिए - एक ही उद्देश्य समान स्थितियों के लिए उपयोग कर रहा है। आप हमेशा एक नया SQL स्ट्रिंग जनरेट करते हैं और योजनाएँ सहेजी नहीं जाती हैं
DO $$
DECLARE r record;
BEGIN
FOR r IN SELECT table_name
FROM information_schema.tables
WHERE table_catalog = 'public'
LOOP
EXECUTE format('UPDATE %I SET id = 10 WHERE id = 15', r.table_name);
END LOOP;
END $$;
ध्यान दें:डायनेमिक SQL असुरक्षित है (एक एसक्यूएल इंजेक्शन है जोखिम) बिना पैरामीटर सैनिटाइजेशन के। मैंने एक फ़ंक्शन का उपयोग किया "प्रारूप " इसके लिए। दूसरा तरीका "quote_ident . का उपयोग कर रहा है "फ़ंक्शन।
EXECUTE 'UPDATE ' || quote_ident(r.table_name) || 'SET ...