Re: Varlenas

From: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
To: Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com>
Cc: Pgsql-Es-Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Varlenas
Date: 2005-03-19 17:37:41
Message-ID: 20050319173741.GA15365@dcc.uchile.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Sat, Mar 19, 2005 at 12:27:31PM -0500, Juan Pablo Espino wrote:

Hola,

> Entiendo que varlena es una estructura muy utilizada en el código de
> postgres, se define como un arreglo (vector o formación) de longitud
> variable, var = variable, len = length, a = array
> y la estructura en sí es
>
> struct
> {
> int32 vl_len;
> char vl_data[1];
> } varlena;
>
> Las cuatro primeras posiciones (sizeof(int32)) de una varlena indican
> el tamaño de la cadena que empieza en la quinta posicion. vl_data es
> una cadena de un byte sin caracter nulo (NULL). Hasta ahora esto es
> lo que entiendo sobre las varlenas, sin embargo no veo como se aplica
> a tantas cosas según dicen. En la lista de hackers hay algunos
> ejemplos, pero aun no comprendo bien, alguien podría ampliarme sobre
> este tema?

Todos los campos de longitud variable son varlenas. Ejemplos: TEXT,
VARCHAR(n), CHAR(n), NUMERIC(m,n), BYTEA, BIT VARYING, arrays de
cualquier tipo, ROW(), etc.

En el caso de los strings uno pensaria que es mejor usar strings
terminados en \0 como en C, pero eso no funciona porque en cada tupla es
necesario encontrar el siguiente atributo, lo cual seria muy lento si
tuvieras que recorrer completo el atributo anterior. Por eso se usan
varlenas para poder hacer un "seek" leyendo solamente el largo.

Para el caso de BYTEA es obvio que no podrias usar un string terminado
en \0.

Ademas, la infraestructura de varlena permite hacer TOAST sin gran
dificultad (ver doc. de TOAST en la seccion Internals).

--
Alvaro Herrera (<alvherre[(at)]dcc(dot)uchile(dot)cl>)
"Coge la flor que hoy nace alegre, ufana. ¿Quién sabe si nacera otra mañana?"

In response to

  • Varlenas at 2005-03-19 17:27:31 from Juan Pablo Espino

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Leonel Nunez 2005-03-19 18:10:29 Re: Varlenas
Previous Message Juan Pablo Espino 2005-03-19 17:27:31 Varlenas