Re: Desencriptar Registros y pasar a otra

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Desencriptar Registros y pasar a otra
Date: 2007-02-20 14:45:59
Message-ID: 20070220144559.GE4217@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gabriel Ferro escribió:

Algunos comentarios

> $gsm$
> BEGIN
> EXECUTE 'SELECT 1 FROM '||quote_ident($1) ||' WHERE '
> ||quote_ident($2)||' LIKE \''||$3||'\' FOR UPDATE NOWAIT';
> RETURN FALSE;
> EXCEPTION WHEN lock_not_available THEN
> RETURN true;
> END;
> $gsm$;

Lo que estas haciendo aqui es muy mala idea: estas haciendo un SELECT
FOR UPDATE de *cada uno* de los registros de la tabla. Si la tabla es
grande, se demorara bastante, ademas de generar un registro WAL para
cada tupla en la tabla, y *ademas* tendra que escribir en cada registro.

Si quieres bloquear una tabla completa, usa LOCK TABLE, el cual tambien
tiene una variante NOWAIT. *NO USES* select for update en este caso
porque el rendimiento necesariamente es muy malo.

> execute 'DELETE FROM "RecibidasDes" where "Sumario" IN (SELECT "Sumario" FROM "Recibidas" WHERE "Sumario" LIKE \''||Depta||'%\');';

Esto se puede hacer sin el EXECUTE, y sin el IN.

> execute 'INSERT INTO "RecibidasDes" SELECT "Sumario", "TipoInfo",ByteaText(decrypt("Info",\''||a||'\',\'bf\')) FROM "Recibidas" WHERE "Sumario" LIKE \''||Depta||'%\';';

Esto tambien se puede hacer sin execute, y creo que con menos cochinada
de comillas.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2007-02-20 14:47:07 Re: OT a quien se deb pedir que se agregue pgsql-es-ayuda a news.postgresql.org
Previous Message Mario 2007-02-20 14:41:24 Fwd: Desencriptar Registros y pasar a otra