Re: Error en Drop Tablespace

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.

In response to

Responses

Browse pgsql-es-ayuda by date

  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