2012-04-18 26 views
18

Tengo una base de datos PostgreSQL 9.1 con aproximadamente 100 tablas que se cargaron en el esquema 'público'. Me gustaría mover esas tablas (pero no todas las funciones en 'público') a un esquema de 'datos'.¿Cómo cambiar el esquema de múltiples tablas de PostgreSQL en una sola operación?

Sé que puedo usar lo siguiente para mover 1 tabla a la vez.

ALTER TABLE [tablename] SET SCHEMA [new_schema] 

¿Es posible mover todas las tablas al nuevo esquema en una sola operación? Si es así, ¿cuál sería la forma más eficiente de lograr esta tarea?

Respuesta

34

DO hará el truco:

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

Eso suena exactamente como lo que estaba imaginando. Como soy nuevo en postgres, ¿dónde debería ejecutar esto? Intenté en pgAdmin 3 (windows) y la línea de comando psql, pero obtuve errores en ambos casos. ¡Gracias por tu ayuda! – RyanDalton

+0

Es solo una parte de SQL, ejecútelo como cualquier consulta en su cliente SQL favorito. Puede usar psql, pgAdmin3 o algo así. –

+0

El error que obtengo de pgAdmin3 es: "ERROR: tipo" quote_ident "no existe. Estado de SQL: 42704. Contexto: función PL/pgSQL" línea_código_bloque "línea 5 en la instrucción EXECUTE." – RyanDalton

Cuestiones relacionadas