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

सभी तालिकाओं के लिए अनुक्रम आईडी पोस्टग्रेएसक्यूएल को बल्क अपडेट कैसे करें

यह मानते हुए कि सभी प्रयुक्त अनुक्रम संबंधित कॉलम के स्वामित्व में हैं, उदा। एक serial . के माध्यम से या identity विशेषता, आप इसका उपयोग वर्तमान डेटाबेस में सभी (स्वामित्व वाले) अनुक्रमों को रीसेट करने के लिए कर सकते हैं।

with sequences as (
  select *
  from (
    select table_schema,
           table_name,
           column_name,
           pg_get_serial_sequence(format('%I.%I', table_schema, table_name), column_name) as col_sequence
    from information_schema.columns
    where table_schema not in ('pg_catalog', 'information_schema')
  ) t
  where col_sequence is not null
), maxvals as (
  select table_schema, table_name, column_name, col_sequence,
          (xpath('/row/max/text()',
             query_to_xml(format('select max(%I) from %I.%I', column_name, table_schema, table_name), true, true, ''))
          )[1]::text::bigint as max_val
  from sequences
) 
select table_schema, 
       table_name, 
       column_name, 
       col_sequence,
       coalesce(max_val, 0) as max_val,
       setval(col_sequence, coalesce(max_val, 1)) --<< this will change the sequence
from maxvals;

पहला भाग एक कॉलम के स्वामित्व वाले सभी अनुक्रमों का चयन करता है। दूसरा भाग तब query_to_xml() . का उपयोग करता है उस अनुक्रम से जुड़े कॉलम के लिए अधिकतम मूल्य प्राप्त करने के लिए। और अंतिम चयन तब setval() . का उपयोग करके प्रत्येक अनुक्रम पर उस अधिकतम मान को लागू करता है .

हो सकता है कि आप इसे setval() . के बिना चलाना चाहें यह देखने के लिए पहले कॉल करें कि सब कुछ आपकी आवश्यकता के अनुसार है या नहीं।



  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. फ्लैट जेसनबी सरणी के तत्वों पर क्वेरी पसंद करें

  3. GroupingError:ERROR:कॉलम ग्रुप बाय क्लॉज में दिखाई देना चाहिए या एक समग्र फ़ंक्शन में उपयोग किया जाना चाहिए

  4. स्ट्रट्स 2 को हाइबरनेट और पोस्टग्रेएसक्यूएल से कैसे कनेक्ट करें

  5. पोस्टग्रेज़ डेटाबेस क्यों नहीं बनाता है?