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.

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.


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.


¿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.


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)

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).


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


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'

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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.