2012-04-18 28 views
18

Mam bazę danych PostgreSQL 9.1 ze 100 tabelami, które zostały załadowane do schematu "publicznego". Chciałbym przenieść te tabele (ale nie wszystkie funkcje w "public") do schematu "danych".Jak zmienić schemat wielu tabel PostgreSQL w jednej operacji?

Wiem, że mogę użyć następujących elementów, aby przesunąć 1 stół na raz.

ALTER TABLE [tablename] SET SCHEMA [new_schema] 

Czy można przenieść wszystkie tabele do nowego schematu w jednej operacji? Jeśli tak, jaki byłby najskuteczniejszy sposób realizacji tego zadania?

Odpowiedz

34

DO rade:

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

to brzmi dokładnie tak, jak to, czego sobie wyobrazić. Ponieważ jestem nowy w Postgres, gdzie powinienem to uruchomić? Próbowałem w pgAdmin 3 (windows) i psql z linii poleceń, ale dostałem błędy w obu przypadkach. Dziękuję za Twoją pomoc! – RyanDalton

+0

To tylko fragment kodu SQL, uruchom go tak, jak każde zapytanie w twoim ulubionym kliencie SQL. Możesz użyć psql, pgAdmin3 lub coś w tym stylu. –

+0

Błąd otrzymany z pgAdmin3 to: "BŁĄD: typ" quote_ident "nie istnieje Stan SQL: 42704. Kontekst: Funkcja PL/pgSQL" inline_code_block "wiersz 5 w instrukcji EXECUTE." – RyanDalton