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?
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=#
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.
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
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';
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
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
Pode escrever \?
para obter informações sobre todos os comandos suportados no psql.