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

एक plpgsql फ़ंक्शन में IF EXISTS के अंदर पहचानकर्ताओं के लिए चर

CREATE OR REPLACE FUNCTION drop_now()
  RETURNS void AS
$func$
DECLARE
   _tbl   regclass;
   _found int;
BEGIN
   FOR _tbl IN 
      SELECT relid
      FROM   pg_stat_user_tables
      WHERE  schemaname = 'public'
      AND    relname LIKE '%test%'
   LOOP
      EXECUTE format($f$SELECT 1 FROM %s
                        WHERE  tm < now() - interval '90 min'$f$, _tbl);
      GET DIAGNOSTICS _found = ROW_COUNT;
      IF _found > 0 THEN
         -- EXECUTE 'DROP TABLE ' || _tbl;
         RAISE NOTICE 'Dropped table: %', _tbl;
      END IF;
   END LOOP;
END
$func$ LANGUAGE plpgsql;

प्रमुख बिंदु

  • row एक आरक्षित शब्द है एसक्यूएल मानक में। Postgres में इसका उपयोग करने की अनुमति है, लेकिन यह अभी भी नासमझी है। मैं इसे अंडरस्कोर _ . के साथ psql वैरिएबल को प्रीपेन्ड करने की आदत बना लेता हूं किसी भी नामकरण विरोध से बचने के लिए।

  • आप पूरी पंक्ति का चयन नहीं करते हैं वैसे भी, इस उदाहरण में केवल तालिका का नाम। regclass . प्रकार के वेरिएबल का सर्वोत्तम उपयोग करें , जिससे स्वचालित रूप से अवैध तालिका नामों के माध्यम से SQL इंजेक्शन से बचा जा सकता है। इस संबंधित उत्तर में विवरण:
    तालिका नाम PostgreSQL फ़ंक्शन पैरामीटर के रूप में

  • आपको LIMIT की आवश्यकता नहीं है एक EXISTS . में अभिव्यक्ति, जो केवल किसी . के अस्तित्व की जांच करती है पंक्तियाँ। और आपको उसी कारण से सार्थक लक्ष्य स्तंभों की आवश्यकता नहीं है। बस लिखें SELECT 1 कोड> या SELECT * या कुछ

  • आपको डायनामिक SQL की आवश्यकता है परिवर्तनीय पहचानकर्ताओं के साथ प्रश्नों के लिए। सादा एसक्यूएल इसके लिए अनुमति नहीं देता है। यानी:एक क्वेरी स्ट्रिंग बनाएं और EXECUTE यह। इस निकट से संबंधित उत्तर में विवरण:
    डायनामिक SQL (EXECUTE) IF स्टेटमेंट के लिए शर्त के रूप में

  • DROP . के लिए भी यही सच है कथन, क्या आप इसे चलाना चाहते हैं। मैंने एक टिप्पणी जोड़ी।



  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 में सीलिंग () कैसे काम करती है

  2. मैं PostgreSQL में कॉलम डिफ़ॉल्ट मान कैसे बदलूं?

  3. OSX 10.10.2 पर R को PostgreSQL से कैसे कनेक्ट करें?

  4. Django 1.8 निरीक्षणडीबी कमांड प्रलेखन के अनुसार PostgreSQL विचारों को नहीं देखता है

  5. PostgreSQL में एक स्ट्रिंग को कैसे विभाजित करें