martes, 21 de abril de 2015

Cómo listar tablas y bases de datos en Postgres


Este artículo explica brevemente cómo listar bases de datos (lo que equivale a ejecutar 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: http://www.linuxito.com

No hay comentarios:

Publicar un comentario