Cómo listar tablas y bases de datos en Postgres
show databases
en MySQL) y tablas (show tables
en MySQL) en Postgres, ejecutando consultas desde línea de comandos con la herramienta psql
.La primera limitación que se encuentra un usuario de MySQL al
interactuar por primera vez con un gestor de bases de datos Postgres.
A pesar de que existen herramientas gráficas, como pgAdmin, es necesario conocer cómo se realizan las tareas desde línea de comandos para estar preparado para cuando las papas queman.
La herramienta psql
provee una terminal interactiva contra servidores de bases de datos PostgreSQL. Es posible utilizarla de forma local (ejecutar psql
directamente en la consola del servidor de bases de datos), o contra un
servidor remoto especificando el host y puerto mediante los parámetros -h
y -p
:
root@dbserver42:~# psql -U postgres psql (9.3.3) Type "help" for help. postgres=#
Para listar las bases de datos de un servidor Postgres (luego de conectarse al mismo) ejecutar el comando l
:
postgres=# l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------------- prueba | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | rol_prueba=Tc/postgres + | | | | | rol_readonly=Tc/postgres postgres | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | template0 | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | =c/postgres (4 rows) postgres=#
Luego, para cerrar la terminal psql
, ejecutar el comando q
:
postgres=# q root@dbserver42:~#
También es posible listar las bases de datos ejecutando directamente el comando psql -l
en la terminal bash:
root@dbserver42:~# psql -U postgres -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------------- prueba | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | rol_prueba=Tc/postgres + | | | | | rol_readonly=Tc/postgres postgres | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | template0 | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | =c/postgres (4 rows)
En el listado se observan 4 bases de datos, de las cuales 3 son bases
de datos de sistema (no se deben eliminar). Cada vez que se crea una
base de datos con el comando CREATE DATABASE
, en realidad
se está copiando una base de datos existente (por defecto el modelo
estándar de bases de datos “template1”). Entonces, la base de datos
“template1” es una plantilla desde la cual se construyen nuevas bases de
datos. Si se agregan objetos a esta base de datos, serán copiados en
bases de datos subsecuentes cada vez que se utilice el comando CREATE DATABASE
.
El segundo modelo estándar de bases de datos “template0” contiene los
mismos datos que posee inicialmente “template1”, es decir los objetos
estándar predefinidos por la versión de PostgreSQL. Nunca deben realizarse modificaciones sobre “template0”.
La tercera base de datos de sistema, “postgres”, funciona como base de
datos por defecto para gestionar conexiones al servidor de bases de
datos por parte de usuarios y aplicaciones. Se crea cuando se inicia un
cluster de bases de datos y es una simple copia de “template1”. Puede
eliminarse (drop) y recrearse si es necesario. Para mayor información ver la documentación oficial de PostgreSQL: 21.3. Template Databases.
Para listar tablas de una base de datos Postgres existe el comando dt
. Conectarse a la base de datos especificando su nombre con el parámetro -d
, y luego ejecutar el comando dt
. Por ejemplo el listado de tablas de una base de datos de un sistema Moodle:
root@dbserver42:~# psql -U postgres -d moodle psql (9.3.3) Type "help" for help. moodle=# dt List of relations Schema | Name | Type | Owner --------+----------------------------------+-------+---------- public | mdl_assign | table | postgres public | mdl_assign_grades | table | postgres public | mdl_assign_plugin_config | table | postgres public | mdl_assign_submission | table | postgres public | mdl_assign_user_flags | table | postgres public | mdl_assign_user_mapping | table | postgres public | mdl_assignfeedback_comments | table | postgres public | mdl_assignfeedback_file | table | postgres public | mdl_assignment | table | postgres public | mdl_assignment_submissions | table | postgres public | mdl_assignsubmission_file | table | postgres public | mdl_assignsubmission_onlinetext | table | postgres public | mdl_backup_controllers | table | postgres public | mdl_backup_courses | table | postgres public | mdl_backup_files_template | table | postgres public | mdl_backup_ids_template | table | postgres public | mdl_backup_logs | table | postgres public | mdl_badge | table | postgres public | mdl_badge_backpack | table | postgres public | mdl_badge_criteria | table | postgres public | mdl_badge_criteria_met | table | postgres --Más--
Manual de PostgreSQL 9.3: PostgreSQL 9.3.4 Documentation
Fuente: https://www.linuxito.com/programacion/337-como-listar-tablas-y-bases-de-datos-en-postgres