Listar todas las tablas en postgresql information_schema

200

¿Cuál es la mejor manera de enumerar todas las tablas dentro del esquema de información de PostgreSQL?

Para aclarar: estoy trabajando con una base de datos vacía (no he agregado ninguna de mis propias tablas), pero quiero ver cada tabla en la estructura de información_esquema.

littleK
fuente

Respuestas:

276

Debería poder ejecutar select * from information_schema.tablespara obtener una lista de todas las tablas que administra Postgres para una base de datos en particular.

También puede agregar un where table_schema = 'information_schema'para ver solo las tablas en el esquema de información.

RodeoPayaso
fuente
44
Gracias, acabo de probar: / dt (asterisco). (Asterisco) ¿es diferente?
littleK
No sé nada sobre lo / dt (asterisco). (Asterisco), lo siento. Acabo de ejecutar la consulta select en postgres y enumeró información sobre todas las tablas en ella. Intente ejecutar la instrucción select (en su base de datos en blanco) y vea qué devuelve.
RodeoClown
Al probar el comando anterior, se enumeran las siguientes tablas en información_esquema: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Entonces, ¿cuál es la diferencia entre esas tablas y las de information_schema.tables?
littleK
2
Todas las tablas que ha enumerado (a través del comando / dt) proporcionan metainformación sobre la base de datos. Cada una de las tablas enumeradas muestra información diferente. Entonces, por ejemplo, la tabla information_schema.tables enumera todas las tablas en la base de datos y sus atributos (como poder ver si es una tabla o una vista, cuál es el nombre y otra información como esa). La tabla information_schema.sql_features mostrará qué características están habilitadas en la base de datos (por lo que puedo ver que tengo Embedded C compatible en mi base de datos, así como SQL directo).
RodeoClown
1
Puede ejecutar un select * en cada una de las tablas enumeradas por el comando dt: le acaba de mostrar una lista de tablas que contienen metadatos en la base de datos.
RodeoClown
112

Para enumerar sus tablas use:

SELECT table_name FROM information_schema.tables WHERE table_schema='public'

Solo enumerará las tablas que cree.

phsaires
fuente
¿Qué hay de las tablas que no crea pero tiene permiso de acceso?
huy
44
Esto solo mostrará tablas en el esquema público. Puede crear tablas en otros esquemas.
Joe Van Dyk
Además, esto no distinguirá entre tablas y vistas.
jayarjo
44
\dt information_schema.

desde dentro de psql, debería estar bien.


fuente
14

El comando "\ z" también es una buena forma de listar tablas cuando se encuentra dentro de la sesión interactiva de psql.

p.ej.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)
Chris Shoesmith
fuente
1
Esto no enumera tablas en esquemas que no sean públicos .
Kenny Evitt
10

Puedes usar también

select * from pg_tables where schemaname = 'information_schema'

En general, las tablas pg * le permiten ver todo en la base de datos, sin restricciones a sus permisos (si tiene acceso a las tablas, por supuesto).

Timofey
fuente
9

Para esquema privado 'xxx'en postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Sin table_type = 'BASE TABLE', enumerará tablas y vistas

germanlinux
fuente
8

1. Obtenga todas las tablas y vistas de information_schema.tables, incluidas las de information_schema y pg_catalog.

select * from information_schema.tables

2. obtener tablas y vistas pertenecen cierto esquema

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3. obtener tablas solamente (casi \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'
hzh
fuente
Si no filtra por tipo_tabla, obtendrá todo tipo de objetos, como tablas y vistas mezcladas.
russellhoff
¿Para qué where table_schema not in ('information_schema', 'pg_catalog')es exactamente ?
jayarjo
1

Si desea una consulta rápida y sucia de una sola línea:

select * from information_schema.tables

Puede ejecutarlo directamente en la herramienta de consulta sin tener que abrir psql.

(Otras publicaciones sugieren buenas consultas más específicas de información_esquema, pero como novedad, encuentro que esta consulta de una sola línea me ayuda a familiarizarme con la tabla)

Sally Levesque
fuente