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

एक ऑपरेशन में एकाधिक PostgreSQL कार्यों की स्कीमा बदलें?

आप लूप को कुछ और परिशोधित कर सकते हैं (केवल दूसरी क्वेरी को प्रदर्शित करते हुए ):

DO
$do$
DECLARE
    r   record;
    sql text = '';
BEGIN
    FOR r IN
        SELECT p.proname, pg_get_function_identity_arguments(p.oid) AS params
        FROM   pg_proc p
        JOIN   pg_namespace n ON n.oid = p.pronamespace
        WHERE  nspname = 'public'
        -- and other conditions, if needed
    LOOP
        sql := sql
          || format(E'\nALTER FUNCTION public.%I(%s) SET SCHEMA new_schema;'
                   ,r.proname, r.params);
    END LOOP;

    RAISE NOTICE '%', sql; -- for viewing the sql before executing it
    -- EXECUTE sql; -- for executing the sql
END
$do$;

प्रमुख बिंदु

  • plpgsql में असाइनमेंट ऑपरेटर है := . = काम करता है, लेकिन अनिर्दिष्ट है।

  • FROM . से अनावश्यक तालिकाओं को हटा दें ।

  • concat() ओवरकिल हो सकता है, लेकिन format() वाक्य रचना को सरल करता है।

बेहतर सेट-आधारित विकल्प

समस्या को सेट-आधारित संचालन के रूप में पुन:कास्ट करना अधिक प्रभावी है। string_agg() के साथ एक चयन करें काम करता है:

DO
$do$
DECLARE
   sql text;
BEGIN
   SELECT INTO sql
          string_agg(format('ALTER FUNCTION public.%I(%s) SET SCHEMA new_schema;'
                   ,p.proname, pg_get_function_identity_arguments(p.oid)), E'\n')
   FROM   pg_proc p
   JOIN   pg_namespace n ON n.oid = p.pronamespace
   WHERE  nspname = 'public';
      -- and other conditions, if needed

   RAISE NOTICE '%', sql; -- for viewing the sql before executing it
   -- EXECUTE sql; -- for executing the sql
END
$do$;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यदि कोई पंक्ति मौजूद है, तो उसके आधार पर अद्यतन/सम्मिलित करें

  2. PostgreSQL का उपयोग करके मूडल के लिए अत्यधिक उपलब्ध डेटाबेस बनाना

  3. सरणियों को एकत्रित नहीं कर सकता

  4. Django - संबंध संबंध मौजूद नहीं है। python manage.py माइग्रेट नहीं चला सकता?

  5. PostgreSQL में SSL कैसे इनेबल करें