Re: parámetro para utilizar con new

From: "Juan Romero" <jgromero(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: "Lista Postgres ES" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: parámetro para utilizar con new
Date: 2008-10-23 21:52:11
Message-ID: 3c7410400810231452u56a1cf44v2582b9f9d13df19a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Disculpas Alvaro, te contesté solo a ti... ahora si a la lista

On Thu, Oct 23, 2008 at 4:02 PM, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> wrote:
> Juan Romero escribió:
>
>> SELECT substring(pg_catalog.pg_get_indexdef(i.indexrelid, 0, true)
>> from position('btree (' IN pg_catalog.pg_get_indexdef(i.indexrelid,
>> 0, true)) + 7
>> for position(')' IN pg_catalog.pg_get_indexdef(i.indexrelid, 0, true)) -
>> (position('btree (' IN pg_catalog.pg_get_indexdef(i.indexrelid, 0,
>> true)) + 7))
>> FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i
>> WHERE c.oid = TG_RELID AND c.oid = i.indrelid AND i.indexrelid = c2.oid
>> AND i.indisprimary = true INTO pk;
>
> Huh ... ¿puedes por favor repetir en castellano qué se supone que hace
> eso de arriba? Yo creo que hay alguna manera mucho mejor de hacerlo.

Oooops! Mis disculpas por la ausencia de explicación.
Eso pone en pk el nombre del campo que es llave primaria de la tabla.
Yo también creo que debe haber una manera mucho mejor de hacerlo, pero
no supe cual :-S

>
>> --Quiero hacer algo como lo siguiente, pero evidentemente no se puede
>>

Cambiando:

>> INSERT INTO t3 (tabla, t_campo) VALUES (TG_TABLE_NAME, NEW.pk);

Por:

stmt := 'INSERT INTO auditoria (tabla, t_campo) VALUES
('||quote_literal(TG_TABLE_NAME) ||', NEW.'||pk||')';
EXECUTE stmt;

Sale como error:

ERROR: se usó NEW en una consulta que no es una regla
SQL state: 42601
Context: sentencia SQL: «INSERT INTO auditoria (tabla, t_codigo)
VALUES ('t2', NEW.t2_id)»
PL/pgSQL function "triggerprueba" line 13 at execute statement

stmt := 'INSERT INTO auditoria (tabla, t_campo) VALUES
('||quote_literal(TG_TABLE_NAME) ||', NEW.'||pk||')';
EXECUTE stmt;

Espero ahora si haberme explicado correctamente

Muchas gracias Jaime y Alvaro por la ayuda hasta ahora, y gracias por
adelantado por lo demás,

Juan Gabriel Romero Silva

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Juan Romero 2008-10-23 23:27:00 Re: parámetro para utilizar con new
Previous Message Javier Chávez B. 2008-10-23 21:36:02 Re: PGDay Rio de La Plata