Ich habe ein mandantenfähiges DB-Setup und muss einige Spalten hinzufügen. Ich verwende Schemas (und Suchpfad), um meine Benutzer zu partitionieren. Daher suche ich nach einer allgegenwärtigen Möglichkeit, eine DDL-Schemaänderung auf alle meine Datenbanken anzuwenden. Anfangs hatte ich gedacht, ich könnte es als einzelne Abfrage tun (Cursor auf pg_catalog), aber ein Befehlszeilenaufruf von psql -f
könnte der bevorzugte Weg sein.
postgresql
postgresql-9.2
Chris
quelle
quelle
Postgres
stattPostgreSQL
ist vollkommen in Ordnung.Antworten:
Ich würde die letztere Lösung bevorzugen. Sie können die Schemanamen in einer Datei (ein Schema pro Zeile) sammeln in
psql
:Dann können Sie ganz einfach Folgendes tun:
Haben Sie ein DDL-Änderungsskript (zum Beispiel
change_schema.sql
) ohne Verweis auf das Inclusive-SchemaDann können Sie jede Zeile der Schemaliste in eine Zeile wie verwandeln
sed
Zum Beispiel mit einem einfachen Befehl - dann müssen Sie nur noch diese Befehle ausführen. Natürlich können Sie es in ein richtiges Shell-Skript verwandeln, wenn Sie möchten.quelle
EXECUTE
mit der die Anweisungen als dynamisches SQL ausgeführt wurden.Der Vollständigkeit halber besteht ein anderer Ansatz darin, alle Schemas zu durchlaufen und die Änderung mit dynamischem SQL in PL / PgSQL auszuführen, z.
quelle