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

SQL DDL कथन के लिए मौजूदा तालिका से स्तंभ नाम फ़िल्टर करें

डीडीएल कमांड को गतिशील रूप से बनाएं। आप इसे दो चरणों में कर सकते हैं:

  1. बिल्ड स्टेटमेंट:

    SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
        || string_agg(column_name, ', ' ORDER BY ordinal_position)
        || ' FROM original.table'
    FROM   information_schema.columns
    WHERE  table_schema = 'original'
    AND    table_name = 'table'
    AND    column_name NOT IN ('column_1', 'column_2');
    
  2. (जांचें कि यह अच्छा है!) फिर जेनरेट किए गए स्टेटमेंट को सर्वर के दूसरे राउंड ट्रिप में निष्पादित करें।

यह जानकारी स्कीमा दृश्य पर आधारित है information_schema.columns . वैकल्पिक रूप से, आप pg_catalog.pg_attribute का उपयोग कर सकते हैं . संबंधित:

लेकिन यह सर्वर के एक चक्कर में भी किया जा सकता है:

DO . के साथ किसी भी ग्राहक का बयान

DO पीएल/पीजीएसक्यूएल कोड के तदर्थ निष्पादन के लिए सिर्फ एक साधारण आवरण है। आप किसी फ़ंक्शन या प्रक्रिया में भी ऐसा ही कर सकते हैं।

DO
$$
BEGIN
   EXECUTE (
   SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
       || string_agg(column_name, ', ' ORDER BY ordinal_position)
       || ' FROM original.table'
   FROM   information_schema.columns
   WHERE  table_schema = 'original'
   AND    table_name = 'table'
   AND    column_name NOT IN ('column_1', 'column_2')
   );
END
$$;

psql मेटा-कमांड के साथ सरल \gexec

चूंकि आपने डिफ़ॉल्ट इंटरैक्टिव टर्मिनल psql का उल्लेख किया है . वहां आप \gexec . का उपयोग कर सकते हैं . यह ...

तो:

SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
    || string_agg(column_name, ', ' ORDER BY ordinal_position)
    || ' FROM original.table'
FROM   information_schema.columns
WHERE  table_schema = 'original'
AND    table_name = 'table'
AND    column_name NOT IN ('column_1', 'column_2')\gexec



  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 - विशाल तालिका (100 मिलियन पंक्तियों) को अद्यतन करने के लिए कैसे गति करें?

  2. Postgresql रिकर्सिव सेल्फ जॉइन

  3. क्या मैं PostgreSQL 8.4 में क्वेरी निष्पादन समय लॉग कर सकता हूं?

  4. SUM के साथ LEFT JOIN को पोस्टग्रेज करता है, लापता रिकॉर्ड

  5. Django:NotImplementedError:एनोटेट () + विशिष्ट (फ़ील्ड) लागू नहीं किया गया है