उपयोग-मामले वास्तव में इसे ansible
के साथ स्वचालित करने के लिए। मैं डेटाबेस डंप केवल आयात करना चाहता हूं जब डेटाबेस पूरी तरह खाली हो (अंदर कोई टेबल नहीं)। निश्चित रूप से एसक्यूएल स्टेटमेंट निष्पादित करने का हमेशा एक तरीका है, लेकिन यह अंतिम उपाय है, मेरा मानना है कि इसके लिए और अधिक सुरुचिपूर्ण समाधान होना चाहिए।PgSQL - डेटाबेस डंप को केवल तभी आयात करें जब डेटाबेस पूरी तरह से खाली हो?
pg_restore
मैनुअल इस विकल्प को तब तक प्रदान नहीं करता है जब तक मैं देखता हूं।
यहाँ कैसे मैं ansible के साथ ऐसा करने की योजना बना रहा हूँ:
- name: db_restore | Receive latest DB backup
shell: s3cmd --skip-existing get `s3cmd ls s3://{{ aws_bucket }}/ | grep sentry | tail -1 | awk '{print $4}'` sql.latest.tgz
args:
chdir: /root/
creates: sql.latest.tgz
- name: db_restore | Check if file exists
stat: path=/root/sql.latest.tgz
register: sql_latest
- name: db_restore | Restore latest DB backup if backup file found
shell: PGPASSWORD={{ dbpassword }} tar -xzOf /root/sentry*.tgz db.sql | psql -U{{ dbuser }} -h{{ pgsql_server }} --set ON_ERROR_STOP=on {{ dbname }}
when: sql_latest.stat.exists
ignore_errors: True
आदर्श रूप में यह अगर डीबी खाली जांच होनी चाहिए। इस उद्देश्य के लिए कोई उत्तरदायी मॉड्यूल मौजूद नहीं है। Google भी चुप्पी में है .. वर्तमान समाधान वास्तव में भी काम करता है, आयात विफल होने पर यह त्रुटि देगा, और मैं केवल त्रुटि को अनदेखा कर सकता हूं, लेकिन झूठा अलार्म देखने के लिए यह थोड़ा दर्दनाक है।
"खाली" एक अस्पष्ट शब्द है। यहां तक कि एक "खाली" डेटाबेस में संग्रहित वस्तुओं का एक गुच्छा परिभाषित किया जा सकता है। 'Pg_restore' यह निर्धारित करेगा कि" पर्याप्त खाली "है? – zerkms
एक प्रश्न तय :) खाली = टेबल के बिना डेटाबेस।ताजा बनाया गया – holms
मुझे उम्मीद नहीं होगी कि "बिना टेबल के" एक अतिरिक्त संकीर्ण आवश्यकता है। दूसरा व्यक्ति बिना किसी अनुक्रम के एक खाली डेटाबेस का इलाज करेगा। – zerkms