DDL endring i flere PostgreSQL tilfeller på samme tid?

stemmer
1

Det er 4 PostgreSQL forekomster som kjører på en server. Jeg ønsker å gjøre DDL endring i dem alle på samme tid.

Hvordan kan jeg gjøre dette?

Publisert på 12/09/2012 klokken 07:28
kilden bruker
På andre språk...                            


1 svar

stemmer
3

Skriv en shell script (hvis du er på * nix) eller .cmdbatch-fil / .vbs(hvis du er i Windows) for å gjøre det. Har manuset invoke psql -f /path/to/ddl.sqlog IP / port, databasenavn, etc.

Alternativt skrive et manus på et språk som Python som har riktig PostgreSQL bindinger. Har skriptet sløyfe gjennom databasene og kjøre DDL for hver. I Python, for eksempel, bør følgende (utestet) script gjøre triks:

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()

Forbedre om ønskelig ved å gjøre ting som å splitte DDL inn en rekke påstander du løkken over slik at du kan gjøre per-statement feilbehandling.

Du kan også generere tilkoblingene dynamisk ved å koble til en DB for hver vert og kjører select datname from pg_databasefor å få en liste over andre DBS.

Svarte 12/09/2012 kl. 08:08
kilden bruker

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