Estoy tratando de aprender sobre administración de PostgreSQL y he comenzado a aprender a usar la psql
herramienta de línea de comandos.
Cuando inicio sesión con psql --username=postgres
, ¿cómo hago una lista de todas las bases de datos y tablas?
He probado \d
, d
y dS+
pero no aparece nada. He creado dos bases de datos y algunas tablas con pgAdmin III, por lo que sé que deberían aparecer en la lista.
Comentarios
Responder
Tenga en cuenta los siguientes comandos:
-
\list
o\l
: enumere todas las bases de datos -
\dt
: enumere todas las tablas en la base de datos actual usando susearch_path
-
\dt *.
: enumere todas las tablas en la base de datos actual independientemente de susearch_path
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 de base de datos:
\connect database_name
o \c database_name
Consulte el manual sobre psql .
Comentarios
- Puede usar
\c db_name
para conectarse a una determinada base de datos. -
\dt
no ‘ t parece enumerar todas las tablas en la base de datos actual (parece excluir aquellas que no ‘ t se encuentran en elsearch_path
al menos en 9.2) -
\dt *.
enumerará todas las tablas en todos los esquemas, sin tener que modificar su ruta de búsqueda. - \ l + es mi favorito – también muestra el uso del disco.
- En Windows puedo listar las bases de datos con este comando
psql -U username -l
pero no funciona con la versión de barra.
Responder
Esta lista de 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;
Comentarios
- Usted ‘ tiene razón, pero la pregunta era acerca de los metacomandos de la herramienta psql. \ dt es mucho más fácil que escribir cualquier consulta.
- Creo que esta es una GRAN respuesta porque se puede ejecutar desde una línea de comandos de Linux en lugar de tener que estar en el intérprete psql que a veces me cuelga al usar ExtraPutty.
- También me salvó el día. Para mi caso particular, ‘ estoy agregando
WHERE table_schema = 'public'
porque quiero eliminar solo tablas personalizadas. - Si comienzas psql con el indicador -E, mostrará la consulta real cuando use un metacomando.
- Sí, creo que ‘ es una buena respuesta ya que le permite unirse y consultar las bases de datos de una manera más controlada, especialmente cuando desea generar algún script a partir de una gran lista de bases de datos. Gracias.
Responder
En Postgresql, estos comandos de terminal enumeran las bases de datos disponibles
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
O el comando expresado de manera más simple:
psql -U pgadmin -l
Esos comandos imprimen esto en la 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 enumeran las tablas disponibles
Debe especificar una base de datos antes de puede enumerar las tablas en esa base de datos.
el@defiant$ psql -U pgadmin -d kurz_prod
Esto lo lleva a una terminal psql:
kurz_prod=#
Use el comando \d
que 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.
Comentarios
- \ d no solo enumera tablas:
\d[S+] list tables, views, and sequences
- Para mí, esta es la » respuesta » correcta porque no ‘ No requiere que ya esté conectado a una base de datos existente.
- Una línea para usar en scripts (como raíz):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Respuesta
\l
también es una abreviatura de \list
. Hay bastantes comandos de barra diagonal, que puede enumerar en psql usando \?
.
Responder
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 search_path 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)
Respuesta
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 permitirá 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 por el 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.
Comentarios
- Si bien esto es cierto, se dirige a un cliente diferente que el OP preguntó.
- Esto funcionó muy bien para mí, y aunque mi caso de uso no fue exactamente lo que pidió el OP, me ayudó a obtener la lista de tablas mientras estaba conectado a través de un contenedor (en Julialang LibPQ.jl )
Respuesta
Es posible que haya insertado las tablas en un esquema que no está en su ruta de búsqueda, o el predeterminado, es decir, público, por lo que las tablas no se mostrarán usando \ dt. Si usa un esquema llamado, digamos, datos, puede solucionarlo ejecutando
alter database <databasename> set search_path=data, public;
Salga y vuelva a ingresar psql y ahora \ dt también le mostrará las tablas en los datos del esquema.
Comentarios
- Bueno, un simple
set search_path=data, public;
también funcionaría 🙂 - @dezso, ¿eso hace que el cambio sea permanente, o solo en esa sesión psql?
- Err, no estaba muy claro. Fue pensado en lugar del ciclo de inicio de sesión.
psql -l
psql --username=postgres -l
.