¿Qué diferencia hay entre el tipo "varchar" y "text" en PostgreSQL?

15

Todo lo que sé sobre sus diferencias es que varchartiene límite, y textno lo es. La documentación no menciona esto.

¿Es esa realmente la única diferencia? ¿Ninguna consideración sobre el rendimiento, etc.?

Eonil
fuente
1
Esto realmente debería migrarse a los administradores de bases de datos . No tiene nada que ver con la administración del servidor.
Evan Carroll

Respuestas:

22

El trasfondo de esto es: el antiguo sistema Postgres usaba el lenguaje PostQUEL y usaba un tipo de datos llamado text(porque alguien pensó que era un buen nombre para un tipo que almacena texto). Luego, Postgres se convirtió para usar SQL como su lenguaje. Para lograr la compatibilidad de SQL, en lugar de cambiar el nombre del texttipo, varcharse agregó un nuevo tipo . Pero ambos tipos usan las mismas rutinas C internamente.

Ahora, hasta cierto punto y en algunos lugares, textestá codificado como un tipo predeterminado, en caso de que no se pueda derivar nada más. Además, la mayoría de las funciones solo están disponibles como tomar un textargumento o regresar text. Los dos tipos son compatibles con binarios, por lo que la conversión es una operación trivial en tiempo de análisis. Pero el uso textsigue siendo en general más natural para el sistema.

Pero aparte de estos puntos finos, no hay una diferencia notable. Use el que le parezca más bonito. ;-)

Peter Eisentraut
fuente
Oh buena explicación. Usaré 'texto' porque no me importa la compatibilidad que bloquea el beneficio de un producto específico. ¡Gracias!
Eonil
1

Ver esta pregunta similar . La diferencia es que no hay diferencia, pero especificar una longitud máxima como la que varchar(n)generalmente no está a su favor, ya que usa más espacio pero no mejora el rendimiento.

mandioca
fuente
0

http://www.postgresql.org/docs/8.4/interactive/datatype-character.html

character varying(n), varchar(n)        variable-length with limit
text                                    variable unlimited length

texto sin longitud declarada. No hay diferencias de rendimiento entre estos dos tipos.

ooshro
fuente
55
También puede usar varchar sin la parte (), lo que también lo hará de longitud ilimitada y, por lo tanto, más o menos equivalente con el texto.
Magnus Hagander