¿Cómo listo todas las bases de datos y tablas usando psql?


935

Estoy tratando de aprender la administración de PostgreSQL y he comenzado a aprender cómo usar la herramienta de línea de comandos psql .

Cuando inicio sesión con psql --username=postgres , ¿cómo enumero todas las bases de datos y tablas?

He intentado \d , d y dS+ pero nada está en la lista.He creado dos bases de datos y algunas tablas con pgAdmin III, así que sé que deberían estar en la lista.

1,226

Tenga en cuenta los siguientes comandos:

  • \list o \l : enumerar todas las bases de datos
  • \dt : enumerar todas las tablas en la base de datos actual

Nunca verá tablas en otras bases de datos, estas tablas no son visibles.Debe conectarse a la base de datos correcta para ver sus tablas (y otros objetos).

Para cambiar las bases de datos:

\connect database_name

Consulte el manual sobre psql .

+115

Puedes usar '' '\ c db_name''' para conectarte a una base de datos determinada. 17 feb. 132013-02-17 08:57:50

+8

'\ dt' no parece enumerar todas las tablas en la base de datos actual (parece excluir aquellas que no se encuentran en' search_path' al menos en 9.2) 06 ago. 132013-08-06 19:42:24

+16

'\ dt * .' listará todas las tablas en todos los esquemas, sin tener que modificar su ruta de búsqueda. 24 mar. 152015-03-24 16:10:34

+14

\ l + es mi favorito - también muestra el uso del disco. 21 may. 152015-05-21 05:57:42

  0

En Windows puedo listar las bases de datos con este comando 'psql -U username -l' pero no funciona con la versión de barra diagonal. 06 oct. 152015-10-06 15:37:48

  0

Estaba buscando este tipo de comando 'psql -c" \ l "template1' donde puedo ejecutarlo desde la línea de comandos. 26 may. 172017-05-26 19:45:51

  0

A destacar (a partir de 9.6): con 2+ esquemas en su ruta de búsqueda y el mismo nombre de tabla presente en esquemas diferentes, \ dt devolverá solo la primera tabla con el mismo nombre, según el orden en la ruta de búsqueda.Me ha parecido extraño. 17 oct. 172017-10-17 16:25:29


64

\l también es una abreviatura de \list .Hay bastantes comandos de barra, que puede listar en psql usando \? .


256

Esto enumera las bases de datos:

SELECT datname FROM pg_database
WHERE datistemplate = false;

Esto enumera las tablas en la base de datos actual.

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
+10

Tienes razón, pero la pregunta era sobre los meta-comandos de la herramienta psql.\ dt es mucho más fácil que escribir cualquier consulta. 18 feb. 112011-02-18 07:50:28

+11

Creo que esta es una GRAN respuesta porque puede ejecutarse desde una línea de comandos de Linux en lugar de tener que estar en el intérprete psql, que a veces me cuelga con ExtraPutty. 16 may. 152015-05-16 17:51:18

+1

También salvé mi día.Para mi caso particular, estoy agregando 'WHERE table_schema = 'public'' porque quiero eliminar solo tablas personalizadas. 28 sep. 152015-09-28 15:31:58

+18

Si inicia psql con el indicador -E, mostrará la consulta real cuando use un meta-comando. 13 ene. 162016-01-13 09:03:31

  0

Esta es una buena respuesta.Aunque OP quería los metacomandos, estaba buscando en Google para esto, y me llevó a esta pregunta. 03 ago. 172017-08-03 00:40:17


88

En Postgresql estos comandos de terminal listan las bases de datos disponibles

[email protected] $/bin/psql -h localhost --username=pgadmin --list

O el comando dice más simplemente:

psql -U pgadmin -l

Esos comandos imprimen esto en el terminal:

         List of databases
   Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
  kurz_prod | pgadmin | UTF8  | en_US.UTF-8 | en_US.UTF-8 |
  pgadmin | pgadmin | UTF8  | en_US.UTF-8 | en_US.UTF-8 |
  postgres | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 |
  template0 | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
     |   |   |    |    | postgres=CTc/postgres
  template1 | postgres | UTF8  | en_US.UTF-8 | en_US.UTF-8 | =c/postgres   +
     |   |   |    |    | postgres=CTc/postgres
(5 rows)

Estas son las bases de datos disponibles.

En PSQL estos comandos listan las tablas disponibles.

Debe especificar una base de datos antes de poder listar las tablas en esa base de datos.

[email protected]$ psql -U pgadmin -d kurz_prod

Esto te lleva a un terminal psql:

kurz_prod=#

Use el comando \d significa mostrar todas las tablas, vistas y secuencias

kurz_prod=# \d

Esto imprime:

   List of relations
Schema | Name | Type | Owner
--------+---------+----------+---------
public | mytable | table | pgadmin
public | testing | sequence | pgadmin
(2 rows)

Luego, para salir del terminal psql, escriba \q y presione enter.O Ctrl-D hace lo mismo.Estas son las tablas en esa base de datos.

+4

\ d no solo lista tablas: '\ d [S +] lista tablas, vistas y secuencias' 06 ago. 132013-08-06 19:43:18

+2

Para mí, esta es la respuesta "correcta" porque no requiere que ya esté conectado a una base de datos existente. 14 mar. 172017-03-14 15:11:47


25

Desde pg_Admin, simplemente puede ejecutar lo siguiente en su base de datos actual y obtendrá todas las tablas para el esquema especificado:

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
     AND table_schema = 'public' 
ORDER BY table_type, table_name

Esto le dará una lista de todas las tablas permanentes (generalmente las tablas que está buscando).Puede obtener solo los nombres de las tablas si cambia el comodín * a solo table_name .El table_schema público es el esquema predeterminado para la mayoría de las bases de datos, a menos que su administrador haya configurado un nuevo esquema.

+3

Si bien esto es cierto, esto se dirige a un cliente diferente al que el OP preguntó. 29 nov. 122012-11-29 17:56:23


17

Es posible que haya insertado las tablas en un esquema que no se encuentra en su ruta de búsqueda, o en el valor predeterminado, es decir, público, por lo que las tablas no aparecerán usando \ dt.Si usa un esquema llamado, por ejemplo, datos, puede arreglarlo ejecutando,

alter database set search_path=data, public;

Salga y vuelva a ingresar a psql y ahora \ dt le mostrará las tablas en datos de esquema también.

+1

Bueno, un simple 'set search_path = data, public;' también funcionaría :) 03 abr. 142014-04-03 14:57:26

  0

@dezso, ¿eso hace el cambio permanentemente, o solo en esa sesión de psql? 03 abr. 142014-04-03 17:40:36

  0

Err, no estaba muy claro.Fue pensado en lugar del ciclo logout-login. 03 abr. 142014-04-03 18:12:37


24

Para obtener más información sobre la base de datos y la lista de tablas, puede hacer:

\l+ para listar bases de datos

                                  List of databases
     Name  | Owner  | Encoding |  Collate  |  Ctype  |  Access privileges  | Size  | Tablespace |        Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
    pgbench  | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 |            | 29 MB  | pg_default |
    postgres  | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 |            | 6073 kB | pg_default | default administrative connection database
    slonmaster | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 |            | 1401 MB | movespace |
    slonslave | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 |            | 32 MB  | pg_default |
    template0 | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 | =c/postgres     +| 5785 kB | pg_default | unmodifiable empty database
         |     |     |       |       | postgres=CTc/postgres |     |      |
    template1 | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 | =c/postgres     +| 5985 kB | pg_default | default template for new databases
         |     |     |       |       | postgres=CTc/postgres |     |      |
    test    | postgres | UTF8   | en_US.UTF-8 | en_US.UTF-8 |            | 13 MB  | pg_default |
(7 rows)

y

\d+ para enumerar todas las tablas en el esquema de ruta de búsqueda actual en la base de datos actual.

test=# \dn+ --list schemas
                List of schemas
    Name | Owner  | Access privileges  |   Description    
--------+----------+----------------------+------------------------
    public | postgres | postgres=UC/postgres+| standard public schema
       |     | =UC/postgres     | 
schema1 | postgres | postgres=UC/postgres+| 
       |     | =UC/postgres     | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                    List of relations
      Schema |   Name    | Type |  Owner   |  Size  | Description
     ---------+-----------------+-------+--------------+------------+-------------
      public | all_units    | table | postgres   | 0 bytes  |
      public | asset      | table | postgres   | 16 kB   |
      public | asset_attribute | table | postgres   | 8192 bytes |
      public | food      | table | postgres   | 48 kB   |
      public | name_log    | table | postgres   | 8192 bytes |
      public | outable     | table | ordinaryuser | 0 bytes  |
      public | outable2    | table | ordinaryuser | 0 bytes  |
      public | test      | table | postgres   | 16 kB   |
      public | usr       | table | postgres   | 5008 kB  |
      schema1 | t1       | table | postgres   | 0 bytes  |
     (10 rows)