Re: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Mariano Reingart <reingart(at)gmail(dot)com>
Cc: Ignacio Balcarce <ignacio(dot)balcarce(at)vivatia(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X
Date: 2010-04-06 22:25:15
Message-ID: 20100406222515.GD3491@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mariano Reingart escribió:
> On Tue, Apr 6, 2010 at 10:08 AM, Ignacio Balcarce
> <ignacio(dot)balcarce(at)vivatia(dot)com> wrote:
>
> > ERROR:  el valor null para la columna «seq_id» viola la restricción not null
> >
> > CONTEXT:  sentencia SQL: «INSERT INTO thuban_seq(seq_id) VALUES
> > (to_char(now(),'YYYYMMDD') || ( $1 +1)) RETURNING seq_id»
> >
> > PL/pgSQL function "thuban_sp_generateid" line 19 at sentencia SQL
>
> ¿Por que $1 si la función no tiene parámetros?

plpgsql convierte las variables (como "id" en este caso) en parámetros,
y se pasan separadamente para su ejecución. Considera que la función se
"compila" una sola vez en cada sesión (en la primera ejecución), y todas
las consultas se almacenan preparadas en memoria; al tiempo de
ejecutarla, se hace solamente un "bind" a los parámetros con el valor
que corresponde a esa ejecución. (Esta es la razón por la que a veces
los planes son tan malos cuando usas una consulta dentro de plpgsql,
siendo que al ejecutarla directamente la consulta es rápida).

--
Alvaro Herrera http://www.advogato.org/person/alvherre
"Si quieres ser creativo, aprende el arte de perder el tiempo"

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-04-06 22:27:26 Re: MSSQL to PostgreSQL - Problema intentando generar ID de modo YYYYMMDD0000000X
Previous Message Jaime Casanova 2010-04-06 20:00:54 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Es posible recuperar una base de datos después de hacer "drop database"?