¿Cómo listar tablas en PostgreSQL? Las formas que yo uso

Si necesitas ver las tablas en tu base de datos PostgreSQL, la forma no es tan obvia como en MySQL. Te muestro las dos maneras principales y cuál prefiero.

Necesitas ver las tablas en tu base de datos PostgreSQL y, si vienes de MySQL, sabes que el famoso SHOW TABLES; no funciona aquí. La forma de consultar la estructura es distinta.

La opción más rápida y que yo uso a diario es desde la consola interactiva psql. Una vez conectado a tu base de datos (por ejemplo, con psql -U postgres -d mi_base_de_datos), simplemente escribes \dt.

\dt

Este comando te mostrará todas las tablas que están en el esquema public, que es el predeterminado si no especificas otro. Si tienes tus tablas organizadas en diferentes esquemas, puedes especificarlo así: \dt nombre_del_schema.*. Por ejemplo, si tienes un esquema llamado app:

\dt app.*

Esto es directo, funcional y rápido. Es lo que necesitas el 90% de las veces para una inspección rápida.

Ahora, si necesitas más detalles de las tablas o si estás construyendo algo que requiere consultar esta información programáticamente, puedes ir por la vía SQL. PostgreSQL tiene tablas del sistema que guardan toda esta metadata. Específicamente, puedes consultar pg_catalog.pg_tables:

SELECT * FROM pg_catalog.pg_tables;

Esta consulta te dará muchísima información: el nombre de la tabla, el esquema al que pertenece, si es temporal, entre otros datos. Si solo te interesa el nombre de la tabla y el esquema, puedes afinar la consulta:

SELECT schemaname, tablename
FROM pg_catalog.pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
AND tableowner <> 'postgres'; -- Para filtrar tablas de usuario

En mi caso, para el día a día, prefiero \dt. Me frustra un poco cuando veo que la gente se complica con una consulta a pg_catalog para algo tan básico como listar nombres de tablas, cuando el meta-comando de psql es mucho más simple y cumple el objetivo. De hecho, puedes listar las bases de datos con \l y conectarte a otra con \c nombre_base, todo desde la misma consola.

Una cosa que aprendí tarde y ojalá hubiera sabido antes, es a valorar la potencia de los meta-comandos de psql. Me demoré en darme cuenta de que no siempre se necesita una query SQL compleja para tareas de administración o exploración de la base de datos. Los \d y sus variantes son una joya que te ahorran mucho tiempo si te acostumbras a ellos.

Jorge RequenaDeveloper full-stack · Chile