From: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
---|---|
To: | José Alberto Sánchez Nieto <albertosanchez(at)hiperusera(dot)es> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Error en Drop Tablespace |
Date: | 2007-10-04 13:23:58 |
Message-ID: | 20071004132358.GF6176@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
José Alberto Sánchez Nieto escribió:
> Gracias por contestar pero sigo teniendo una duda, yo vengo del mundo
> oracle y allí el bloque empieza con BEGIN, etc, con esto hago una
> transacción con muchas órdenes dentro pero aquí no las estoy ejecutando
> una tras otra, lo estoy ejecutando desde el pgadminIII. También he
> detectado que el pgadmin me crea un archivo con la versión del postgres en
> el
> directorio de los tablespace y entonces al ir a borrarlos no me deja ¿como
> puedo evitarlo?, yo lo que tengo en el script es algo como esto:
Dave Page me dice lo siguiente: el "query tool" de pgAdmin no es como
psql, que separa las sentencias y las manda por separado. Lo que hace
es mandarlas todas juntas, en una sola invocacion a PQexec(). Cuando se
hace esto, todas se ejecutan en una sola transaccion; y Postgres rechaza
multiples sentencias DROP TABLESPACE en una sola transaccion.
Es posible que funcionara si hicieras algo como esto:
DROP SCHEMA IF EXISTS B85139855 CASCADE;
DROP ROLE IF EXISTS vhalmanar;
BEGIN;
DROP TABLESPACE IF EXISTS DAT_GRANT_B85139855;
COMMIT;
BEGIN;
DROP TABLESPACE IF EXISTS DAT_MEDIUM_B85139855;
COMMIT;
BEGIN;
DROP TABLESPACE IF EXISTS DAT_SMALL_B85139855;
COMMIT;
Etc, o sea demarcar explicitamente las transacciones. (No lo hice para
las dos primeras sentencias porque DROP SCHEMA y DROP ROLE funcionan
correctamente dentro de una transaccion).
La otra alternativa es pasarle el archivo a psql -f, en lugar de usar
pgAdmin. (Esto te permite, ademas, evitar copy&paste cada vez ... solo
le pasas el nombre del archivo y ya. O bien abres psql y haces
"\i c:/path/al/archivo" y te lo ejecuta completo).
psql no tiene el mismo problema de pgAdmin, porque es mas sofisticado:
lo que hace es dividir la cadena en cada una de las consultas que la
componen (separando con el punto y coma) y enviandolas por separado. De
esa forma, cada una se ejecuta en una transaccion individual.
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
From | Date | Subject | |
---|---|---|---|
Next Message | Jenaro Centeno Gomez | 2007-10-04 14:17:48 | Re: Modelador |
Previous Message | José Alberto Sánchez Nieto | 2007-10-04 12:59:29 | Error en Drop Tablespace |