2012-04-18 16 views
18

Possiedo un database di PostgreSQL 9.1 con circa 100 tabelle caricate nello schema "pubblico". Vorrei spostare quelle tabelle (ma non tutte le funzioni in 'pubblico') in uno schema 'dati'.Come modificare lo schema di più tabelle PostgreSQL in un'unica operazione?

So che posso usare quanto segue per spostare 1 tabella alla volta.

ALTER TABLE [tablename] SET SCHEMA [new_schema] 

È possibile spostare tutte le tabelle nel nuovo schema in un'unica operazione? In tal caso, quale sarebbe il modo più efficiente per eseguire questo compito?

risposta

34

DO farà il trucco:

DO 
$$ 
DECLARE 
    row record; 
BEGIN 
    FOR row IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' -- and other conditions, if needed 
    LOOP 
     EXECUTE 'ALTER TABLE public.' || quote_ident(row.tablename) || ' SET SCHEMA [new_schema];'; 
    END LOOP; 
END; 
$$; 
+0

Che suona esattamente come quello che stavo immaginando. Dal momento che sono nuovo di Postgres, dove dovrei eseguire questo? Ho provato in pgAdmin 3 (windows) e riga di comando psql, ma ho ottenuto errori in entrambi i casi. Grazie per l'aiuto! – RyanDalton

+0

È solo un pezzo di SQL, eseguilo come qualsiasi query nel tuo client SQL preferito. Potresti usare psql, pgAdmin3 o qualcosa del genere. –

+0

L'errore che ricevo da pgAdmin3 è: "ERRORE: tipo" quot_ident "non esiste Stato SQL: 42704. Contesto: PL/pgSQL funzione" inline_code_block "riga 5 all'istruzione EXECUTE." – RyanDalton

Problemi correlati