[Pgsql-ayuda] Longitud de campos string

Alvaro Herrera alvherre@dcc.uchile.cl
Tue, 2 Sep 2003 15:05:54 -0400


On Tue, Sep 02, 2003 at 12:56:49PM -0500, Manuel Sugawara wrote:
> Alvaro Herrera <alvherre@dcc.uchile.cl> writes:
> 
> > On Wed, Sep 03, 2003 at 01:01:22AM -0400, Edwin Quijada wrote:
> > > Es a char , varchar y bpchar.
> > > Lo que deseo es saber cual es la longitd del campo para luego truncarlo en
> > > caso de ser necesario mediante un trigger.
> > 
> > Lee el campo attypmod de la tabla pg_attribute y restale 4.
> 
> ¿no sería más general restarle sizeof(int)?.

Me parece que los campos varlena (text, varchar, numeric, etc) tienen un
largo codificado en 4 bytes, aunque sea en maquinas de 64 bits.  Eso es
lo que me parece entender en src/include/access/postgres.h:

/* ----------------
 * struct varattrib is the header of a varlena object that may have been
 * TOASTed.
 * ----------------
 */

typedef struct varattrib
{
    int32       va_header;      /* External/compressed storage */
    union
[...]

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"If it wasn't for my companion, I believe I'd be having
the time of my life"  (John Dunbar)