Der Anwendungsfall, um dies mit ansible
zu automatisieren. Ich möchte Datenbank-Dump nur importieren, wenn die Datenbank vollständig leer ist (keine Tabellen im Inneren). Natürlich gibt es immer eine Möglichkeit, SQL-Anweisungen auszuführen, aber dies ist der letzte Ausweg, ich glaube, dass es elegantere Lösungen dafür geben sollte.PgSQL - Wie Datenbank-Dump nur zu importieren, wenn die Datenbank vollständig leer ist?
pg_restore
Handbuch bietet diese Option nicht, soweit ich sehe.
Hier ist, wie ich plane, diese mit ansible zu tun:
- 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
Im Idealfall sollte dies überprüfen, ob DB leer. Zu diesem Zweck existiert kein geeignetes Modul. Google ist auch in der Stille .. Aktuelle Lösung funktioniert auch, dies wird Fehler geben, wenn der Import fehlschlägt, und ich kann einfach ignorieren Fehler, aber es ist ein bisschen schmerzhaft, einen Fehlalarm zu sehen.
"leer" ist ein vager Begriff. Sogar eine "leere" Datenbank kann eine Menge gespeicherter Objekte definiert haben. Wie würde 'pg_restore' feststellen, dass es" leer genug "ist? – zerkms
eine Frage behoben :) leer = Datenbank ohne Tabellen.Frisch erstellt – holms
Ich würde nicht erwarten, dass ein solcher Schlüssel "ohne Tabellen" eine extra-enge Anforderung ist. Die andere Person würde eine leere Datenbank als die ohne Sequenzen behandeln. – zerkms