Changement de DDL plusieurs instances postgresql en même temps?

voix
1

Il y a 4 cas postgresql en cours d'exécution sur 1 serveur. Je veux faire du changement ddl dans tous en même temps.

Comment puis-je faire ceci?

Créé 12/09/2012 à 08:28
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Ecrire un script shell (si vous êtes sur * nix) ou .cmdfichier batch / .vbs(si vous êtes sous Windows) pour le faire. Avoir l'invocation du script psql -f /path/to/ddl.sqlet le nom de la base de données IP / port, etc.

Alternativement, écrire un script dans un langage comme Python qui a des liens avec PostgreSQL appropriés. Avoir la boucle de script à travers les bases de données et exécutez le DDL pour chacun. En Python, par exemple, le script suivant (non testé) devrait faire l'affaire:

import psycopg2
conn_definitions = [
    "dbname=db1 port=5432 host=127.0.0.1",
    "dbname=db2 port=5432 host=127.0.0.1",
    "dbname=db3 port=5432 host=127.0.0.1",
    "dbname=db4 port=5432 host=127.0.0.1",
]
ddl = """
    CREATE TABLE blah (
        blah integer
    );
    CREATE INDEX blah_blah_idx ON blah(blah);
"""
connections = []
cursors = []
for conn_info in conn_definitions:
    conn = psycopg2.connect(conn_info)
    curs = conn.cursor()
    cursors.append(curs)
    connections.append(conn)
 for curs in cursors:
    curs.execute("BEGIN;")
 for curs in cursors:
    curs.execute(ddl)
 for curs in cursors:
    curs.execute("COMMIT;")
 for conn in connections:
    conn.close()

Améliorer si on le désire en faisant des choses comme diviser le DDL dans un tableau des états que vous boucle sur vous pouvez donc faire le traitement des erreurs par-déclaration.

Vous pouvez également générer les connexions dynamiquement en se connectant à un DB pour chaque hôte et en cours d' exécution select datname from pg_databasepour obtenir une liste d'autres blocs de données.

Créé 12/09/2012 à 09:08
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more