J'ai une configuration de base de données multi-locataire et j'ai besoin d'ajouter des colonnes. J'utilise des schémas (et search_path) pour partitionner mes utilisateurs, donc je cherche un moyen omniprésent d'appliquer un changement de schéma DDL à toutes mes bases de données. Au départ, je pensais que je pourrais le faire en tant que requête unique (curseur sur pg_catalog), mais penser à une invocation en ligne de commande de psql -f
pourrait être le moyen préféré.
8
Postgres
au lieu dePostgreSQL
est parfaitement OK.Réponses:
Je préférerais cette dernière solution. Vous pouvez collecter les noms de schéma dans un fichier (un schéma par ligne) dans
psql
:Ensuite, vous pouvez facilement effectuer les opérations suivantes:
Avoir un script changeant DDL (par exemple,
change_schema.sql
), sans référence au schéma inclusEnsuite, vous pouvez transformer chaque ligne de la liste des schémas en une ligne comme
avec une simple
sed
commande, par exemple - alors il vous suffit d'exécuter ces commandes. Bien sûr, vous pouvez le transformer en un bon script shell si vous le souhaitez.la source
EXECUTE
les instructions en SQL dynamique.Juste pour être complet, une autre approche consiste à boucler sur tous les schémas et à exécuter le changement avec du SQL dynamique en PL / PgSQL, par exemple:
la source