web-dev-qa-db-fra.com

Psql liste toutes les tables

J'aimerais répertorier toutes les tables de la base de données liferay de mon installation PostgreSQL. Comment je fais ça?

Je voudrais exécuter SELECT * FROM applications; dans la base de données liferay. applications est une table dans ma vie, db. Comment est-ce fait?

Voici une liste de toutes mes bases de données:

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=# 
120
pethel

Si vous souhaitez lister toutes les tables , vous devez utiliser:

\dt *.*

pour indiquer que vous voulez toutes les tables dans tous les schémas . Cela inclura les tables dans pg_catalog, les tables système et celles dans information_schema. Il n'y a pas de moyen intégré de dire "toutes les tables dans tous les schémas définis par l'utilisateur"; vous pouvez toutefois définir votre search_path sur une liste de tous les schémas d’intérêt avant de lancer \dt.

Vous voudrez peut-être le faire par programme, auquel cas psql les commandes antislash ne suffiront pas. C'est ici que le INFORMATION_SCHEMA vient à la rescousse. Pour lister les tables:

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

En passant, si vous voulez voir ce que psql fait en réponse à une commande de barre oblique inversée, exécutez psql avec l'indicateur -E. par exemple:

$ 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;
**************************

vous pouvez donc voir que psql cherche pg_catalog.pg_database quand il obtient une liste de bases de données. De même, pour les tables d'une base de données donnée:

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;

Il est préférable d'utiliser le INFORMATION_SCHEMA portable _ standard au lieu de SQL, si possible, mais vous avez parfois besoin d'informations spécifiques à Pg. Dans ces cas, il est judicieux d'interroger le catalogues système directement, et psql -E peut être un guide utile pour savoir comment procéder.

189
Craig Ringer

Connectez-vous à la base de données, puis listez les tables:

\c liferay
\dt

C'est comme ça que je le fais quand même.

Vous pouvez combiner ces deux commandes sur une seule ligne, si vous préférez:

\c liferay \dt
90
d11wtq

Pour voir les tables publiques que vous pouvez faire

tables de liste

\dt

les privilèges d'accès aux tables, aux vues et aux listes

\dp or \z

ou juste les noms de table

select table_name from information_schema.tables where table_schema = 'public';
8
nikkypx

Dans SQL Query, vous pouvez écrire ce code:

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

Remplacez votre schéma de table par YOUR_TABLE_SCHEME;

Exemple:

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

Pour voir tous les schémas et toutes les tables, il n'est pas nécessaire d'utiliser la clause where:

select table_name from information_schema.tables
1
Sevki Kocadag

Cela peut être utilisé dans les scripts d'automatisation si vous n'avez pas besoin de toutes les tables dans tous les schémas:

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done
0
danbst