Cuando uno viene de bases de datos como Oracle, la primera vez que te enfrentas a PostgreSQL y necesitas ver la estructura de una tabla, la pregunta obvia es: ¿dónde está mi DESCRIBE TABLE? No existe tal comando directamente en psql, pero hay equivalentes que funcionan igual o incluso mejor.
La forma más rápida y que yo uso el 90% de las veces para ver la definición de una tabla en psql es el comando \d. Así de simple:
\d nombre_de_tu_tabla
Si ejecutas eso, psql te va a mostrar la definición de la tabla: sus columnas, tipos de datos, valores por defecto, si aceptan nulos, e incluso información sobre índices, claves primarias, claves foráneas y triggers asociados. Es una vista bastante completa y súper útil para una revisión rápida. De hecho, para la mayoría de los casos, esto es más que suficiente.
El comando \d es versátil. Si solo ejecutas \d sin un nombre, te lista todas las tablas, vistas y secuencias en el esquema actual. Y si quieres ser más específico, puedes usar:
\dtpara listar solo tablas.\dvpara listar solo vistas.\dspara listar solo secuencias.\dipara listar solo índices.
La verdad, estos comandos de psql son una joya. Son rápidos, interactivos y te dan la información que necesitas sin dar muchas vueltas. Para inspecciones ad-hoc, no hay nada que les gane.
La Vía Estándar SQL: INFORMATION_SCHEMA
Pero claro, a veces necesitas algo más programático o que no dependa de la herramienta cliente. Ojo que no todos trabajamos siempre en psql; si estás haciendo un script o una aplicación que necesita introspección de la base de datos, los comandos \d no te van a servir. Ahí es donde entra el estándar SQL con INFORMATION_SCHEMA.
INFORMATION_SCHEMA es un conjunto de vistas que provee información sobre el esquema de la base de datos de una forma estandarizada. Prácticamente todas las bases de datos relacionales modernas lo implementan (PostgreSQL, MySQL, SQL Server, etc.), lo que lo hace útil si buscas algo más portable.
Para obtener la información de las columnas de una tabla específica, puedes hacer una consulta así:
SELECT
column_name,
data_type,
character_maximum_length,
numeric_precision,
column_default,
is_nullable
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
table_schema = 'public' AND -- ¡Importante! Especificar el esquema
table_name = 'nombre_de_tu_tabla'
ORDER BY
ordinal_position;
Vamos a desglosar esto un poco:
column_name: El nombre de la columna.data_type: El tipo de dato (e.g.,integer,character varying,timestamp without time zone).character_maximum_length: Si es un tipo de texto, su longitud máxima.numeric_precision: Para tipos numéricos, su precisión.column_default: Si tiene un valor por defecto.is_nullable: Si la columna acepta valoresNULL(YESoNO).table_schema: Esto es crucial. Si no lo pones, puedes obtener resultados de tablas con el mismo nombre en diferentes esquemas. Casi siempre será'public', pero depende de tu configuración.ordinal_position: Para ordenar las columnas en el mismo orden en que aparecen en la tabla.
En mi experiencia, esta aproximación con INFORMATION_SCHEMA es excelente cuando necesitas construir herramientas, generar documentación automáticamente o hacer verificaciones de esquema como parte de un pipeline de CI/CD. Es más verboso que \d, sí, y a veces me frustra un poco la sobreingeniería de tener que escribir una query larga para algo tan simple como ver las columnas, pero entiendo su propósito y su valor en escenarios más complejos.
Otras vistas útiles en INFORMATION_SCHEMA
Aparte de COLUMNS, hay otras vistas en INFORMATION_SCHEMA que te pueden servir:
TABLES: Información sobre todas las tablas y vistas.VIEWS: Detalles solo de las vistas.KEY_COLUMN_USAGE: Información sobre las columnas que forman parte de claves primarias o foráneas.
¿Cuál usar?
Si estás interactuando directamente con la base de datos a través de psql, usa \d. Es el camino rápido, simple y directo. Te da casi todo lo que necesitas al instante.
Si necesitas obtener esta información de forma programática, dentro de un script, o si buscas portabilidad entre diferentes motores de base de datos, entonces INFORMATION_SCHEMA es tu mejor amigo. Es más lento de escribir al principio, pero te da la flexibilidad y el control que los comandos de psql no pueden ofrecer fuera de su entorno.
Algo que me costó entender al principio de mi carrera, y que ojalá hubiera sabido antes, es que la herramienta interactiva (psql) y la interfaz SQL estándar (INFORMATION_SCHEMA) no son excluyentes. No tienes que elegir una y apegarte a ella ciegamente. Son dos herramientas distintas para propósitos distintos, y la clave es saber cuándo usar cada una. Muchas veces perdí tiempo intentando hacer queries complejas a INFORMATION_SCHEMA para inspecciones rápidas, cuando un simple \d me hubiera ahorrado varios minutos. La simpleza es a veces la mejor solución.