PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

तालिका नाम n Postgre>=9.2 . चर से चयन कैसे करें

सही उत्तर एंटोन कोवलेंको की एक टिप्पणी है

आप कभी भी एम्बेडेड 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 ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:चेतावनी:कंसोल कोड पेज (437) विंडोज कोड पेज (1252) से अलग है

  2. प्रति समूह पहली और अंतिम पंक्ति से मान प्राप्त करें

  3. pyodbc को Postgres . से कनेक्ट करें

  4. SQL क्वेरी की परिणाम पंक्तियों को समान रूप से पूर्ण श्रेणी में कैसे कम करें?

  5. स्तंभ नाम के साथ समस्या PostgreSQL में एक कोलन है