Lista de tablas en un esquema PostgreSQL


329

Cuando hago un \dten psql solo obtengo una lista de tablas en el esquema actual ( publicpor defecto).

¿Cómo puedo obtener una lista de todas las tablas en todos los esquemas o un esquema particular?

Respuestas:


505

En todos los esquemas:

=> \dt *.*

En un esquema particular:

=> \dt public.*

Es posible utilizar expresiones regulares con algunas restricciones.

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Los usuarios avanzados pueden usar anotaciones de expresiones regulares como clases de caracteres, por ejemplo [0-9] para que coincida con cualquier dígito. Todos los caracteres especiales de expresión regular funcionan como se especifica en la Sección 9.7.3, excepto .que se toma como un separador como se mencionó anteriormente, *que se traduce a la notación de expresión regular .*, ?que se traduce .y $que coincide literalmente. Puede emular estos caracteres de patrón según sea necesario escribiendo ?para ., (R+|)para R*o (R|)para R?. $no es necesario como un carácter de expresión regular ya que el patrón debe coincidir con el nombre completo, a diferencia de la interpretación habitual de las expresiones regulares (en otras palabras,$se agrega automáticamente a su patrón). Escriba *al principio y / o al final si no desea que se ancle el patrón. Tenga en cuenta que entre comillas dobles, todos los caracteres especiales de expresión regular pierden sus significados especiales y coinciden literalmente. Además, los caracteres especiales de la expresión regular coinciden literalmente en los patrones de nombre de operador (es decir, el argumento de \do).


66
Simplemente \dtes equívoco \dt public.*, ¿estoy en lo cierto?
Frozen Flame

¿Qué tal, digamos, dos tablas específicas en un esquema específico? Al igual que \dt public.user_info, public.user_scope?
James M. Lay

No importa, es más fácil hacerlo \dt public.a; \dt public.b;solo en una línea.
James M. Lay

es una especie de implícito .. Si \ dt da sólo las tablas de "público", uno no esperaría nada más a través de expresiones regulares ..
mehmet

1
@FrozenFlame ¡No lo es! De forma predeterminada, muestra lo que está en su search_path, y que por defecto es "$user", public.*. En consecuencia, set search_path=s; \dtse enumerarán todas las tablas en el esquema s.
Lukas Juhrich

258

Puede seleccionar las tablas de information_schema

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

77
muy útil si su interfaz no admite los accesos directos. Gracias.
Matt Bannert el

1
Esto también es bueno porque podría hacer algo como seleccionar table_schema, table_name de information_schema.tables donde table_name como '% whatever%'; si necesita saber en qué esquema se encuentra la tabla. No estoy seguro de poder hacerlo con \ dt
Josh Brown

2
Gracias, funciona en Amazon Redshift y \ dt (respuesta aceptada) no.
Carlos2W

2
Esta es la respuesta más útil en general. information_schema se define en los Estándares SQL y está disponible en la mayoría de las bases de datos que cumplen
Davos

54

Alternativamente information_schema, es posible usar pg_tables:

select * from pg_tables where schemaname='public';

3
Tenga en cuenta que si sólo desea que el nombre de la tabla es la consulta resultante esSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Subvención Humphries

Encontró un problema de permisos al information_schemano enumerar elementos del publicesquema, pero el pg_tablesmétodo funcionó bien. ¡Muchas gracias!
John Crawford

8

Para aquellos que se encuentren con esto en el futuro:

Si desea ver una lista de relaciones para varios esquemas:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
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.