Lista de todas as tabelas Psql

gostaria de listar todas as tabelas na base de dados liferay na minha instalação PostgreSQL. Como faço isso?

Eu gostaria de executar SELECT * FROM applications; na base de dados liferay. applications é uma mesa no meu cadáver. Como se faz isto?

Aqui está uma lista de todas as minhas bases de dados.
postgres=# \list
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
 -----------+----------+----------+-------------+-------------+-----------------------
 liferay   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | liferay=CTc/postgres
 lportal   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# 
Author: Craig Ringer, 2012-09-16

6 answers

Se desejar listar todas as tabelas , deve usar:

\dt *.*

Para indicar que quer todas as tabelas em todos os esquemas. Isto incluirá as tabelas em pg_catalog, as tabelas do sistema e as tabelas em information_schema. Não há nenhuma forma incorporada de dizer "todas as tabelas em todos os esquemas definidos pelo Utilizador"; você pode, no entanto, definir o seu search_path para uma lista de todos os esquemas de interesse antes de executar \dt.

Você pode querer fazer isto programaticamente, nesse caso psql backslash-comandos não vão fazer trabalho. É aqui que a INFORMATION_SCHEMA vem em Socorro. Para listar os quadros:

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

BTW, se alguma vez quiser ver o que psql está a fazer em resposta a um comando backslash, execute psql com a bandeira -E. eg:

$ psql -E regress    
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
       pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
       d.datcollate as "Collate",
       d.datctype as "Ctype",
       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************

Então você pode ver que {[8] } está à procura {[[14]} quando obtém uma lista de bases de dados. Do mesmo modo, para os quadros de uma dada base de Dados:

SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

É preferível usar o SQL-padrão, portátil INFORMATION_SCHEMA em vez dos catálogos do sistema Pg, sempre que possível, mas às vezes você precisa de informações Pg-específicas. Nesses casos, é bom consultar os catálogos do sistema diretamente, e psql -E pode ser um guia útil para como fazê-lo.

 174
Author: Craig Ringer, 2013-12-29 08:29:13

Liga-te à base de dados e depois listas as tabelas:

\c liferay
\dt
É assim que eu faço.

Pode combinar estes dois comandos numa única linha, se preferir:

\c liferay \dt
 85
Author: d11wtq, 2012-09-16 09:03:55

Para ver as tabelas públicas pode fazer

Quadros da lista

\dt

Lista de privilégios, vista e acesso

\dp or \z

Ou apenas os nomes das tabelas

select table_name from information_schema.tables where table_schema = 'public';
 5
Author: nikkypx, 2016-07-19 05:09:08

Na consulta SQL, você pode escrever este código:

select table_name from information_schema.tables where table_schema='YOUR_TABLE_SCHEME';

Substitua o esquema da sua tabela por o seu _TABLE_SCHEME;

Exemplo:

select table_name from information_schema.tables where table_schema='eLearningProject';

Para ver todo o esquema e todos os quadros, não há necessidade de onde a Cláusula:

select table_name from information_schema.tables
 1
Author: Sevki Bekir, 2016-08-26 13:43:56

Isto pode ser usado em scripts de automação se não precisar de todas as tabelas em todos os esquemas:

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done
 0
Author: danbst, 2017-09-20 11:42:25

Pode escrever \? para obter informações sobre todos os comandos suportados no psql.

 -2
Author: Sunil Kumar, 2017-03-03 07:19:55