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

PostgreSQL में किसी विशेष स्कीमा में सभी वस्तुओं के स्वामित्व को कैसे बदलें?

कुछ सुझाव यहां दिए गए हैं (धन्यवाद), मुझे सभी ऑब्जेक्ट के (TABLES / SEQUENCES / VIEWS / FUNCTIONS / AGGREGATES / TYPES) ​​को बदलने के लिए एक बैश स्क्रिप्ट लिखने के लिए प्रेरित किया एक बार में एक विशेष स्कीमा में स्वामित्व। स्क्रिप्ट में कोई विशेष कोड शामिल नहीं है, मैंने मूल रूप से सुझाई गई तकनीक को चुना और स्क्रिप्ट के माध्यम से कार्यान्वयन विधि को सरल बनाया। वास्तव में, REASSIGN OWNED BY कमांड अधिकांश कार्य सुचारू रूप से करता है, हालाँकि, यह किसी भी स्कीमा की परवाह किए बिना डेटाबेस-वाइड ऑब्जेक्ट्स के स्वामित्व को बदल देता है। दो घटनाएँ, जहाँ आप इसके स्वामित्व वाले REASSIGN का उपयोग नहीं कर सकते हैं:

1. यदि उपयोगकर्ता गलती से अपनी सभी वस्तुओं को सुपर-यूज़र (पोस्टग्रेज़) के साथ बनाता है, और बाद में अन्य उपयोगकर्ता में बदलने का इरादा रखता है, तो REASSIGN OWNED BY काम नहीं करेगा और यह केवल त्रुटि के रूप में:

postgres=# reassign owned by postgres to user1;
ERROR: cannot reassign ownership of objects owned by role postgres because they are required by the database system

2. यदि उपयोगकर्ता केवल एक स्कीमा ऑब्जेक्ट के स्वामित्व को बदलना चाहता है।

या तो वस्तुओं को बदलने के मामले, "पोस्टग्रेज" उपयोगकर्ता से दूसरे उपयोगकर्ता के लिए या केवल एक स्कीमा ऑब्जेक्ट को बदलने के लिए, हमें प्रत्येक ऑब्जेक्ट के माध्यम से pg_catalog's &Information_schema से ऑब्जेक्ट विवरण एकत्र करके और ALTER TABLE / FUNCTION / AGGREGATE / TYPE पर कॉल करके लूप करना होगा। आदि.

मुझे OS कमांड (sed/egrep) का उपयोग करके pg_dump आउटपुट को ट्विक करने की तकनीक पसंद आई, क्योंकि यह ज्ञात है कि स्वभाव से pg_dump ALTER लिखता है .. हर ऑब्जेक्ट का स्वामी (TABLES / SEQUENCES / VIEWS / FUNCTIONS / AGGREGATES / TYPES ) इसके आउटपुट में। नए USER/SCHEMANAME को sed के साथ बदलकर pg_dump stdout से उन कथनों को ग्रीप करना और फिर उन कथनों को psql क्लाइंट को वापस भेजना चीजों को ठीक कर देगा, भले ही पोस्टग्रेस उपयोगकर्ता के स्वामित्व वाली वस्तु हो। मैंने स्क्रिप्ट में एक ही दृष्टिकोण का उपयोग किया और उपयोगकर्ता को नया उपयोगकर्ता नाम और स्कीमा नाम पास करने की इजाजत दी, इसलिए इसे ALTER… OWNER TO .. ​​कथन में बदलने के लिए।

स्क्रिप्ट उपयोग और आउटपुट:

sh change_owner.sh  -n new_rolename -S schema_name

-bash-4.1$ sh change_owner.sh -n user1 -S public

Summary:
Tables/Sequences/Views : 16
Functions : 43
Aggregates : 1
Type : 2

आप यहां से स्क्रिप्ट डाउनलोड कर सकते हैं, और इसके उपयोग में आपकी सहायता के लिए README भी है।


  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. सेलेक्ट स्टेटमेंट में डायनामिक कॉलम पोस्टग्रेज करता है

  4. असंगत पोस्टग्रेएसक्यूएल दास का पुनर्निर्माण कैसे करें

  5. Amazon AWS का उपयोग करके PostgreSQL के लिए कोल्ड स्टैंडबाय बनाना