2524 votes

Comment afficher des tables dans PostgreSQL?

Quel est l'équivalent de show tables (de MySQL) dans PostgreSQL?

0 votes

3585voto

Mihai Limbășan Points 17205

De l'interface de ligne de commande psql,

Tout d'abord, choisissez votre base de données

\c nom_de_la_base_de_données

Ensuite, cela montre toutes les tables dans le schéma actuel:

\dt

De manière programmatique (ou également à partir de l'interface psql, bien sûr):

SELECT * FROM pg_catalog.pg_tables;

Les tables système se trouvent dans la base de données pg_catalog.

132 votes

@StephenCorwin Non, \l est l'équivalent de show databases en MySQL. dt show tables et l show databases

17 votes

\dt est très utile. pg_catalog.pg_tables est beaucoup moins utile, car il semble regrouper les tables internes avec celles créées par l'utilisateur pour la base de données à laquelle vous êtes connecté.

36 votes

psql my_db_name devrait être exécuté pour que \dt fonctionne. Lorsque j'ai exécuté psql sans nom de base de données, j'ai reçu un message "Aucune relation trouvée"

228voto

JLarky Points 1425

Connectez-vous en tant que superutilisateur :

sudo -u postgres psql

Vous pouvez lister toutes les bases de données et les utilisateurs en utilisant la commande \l, (liste des autres commandes avec \?).

Maintenant, si vous voulez voir d'autres bases de données, vous pouvez changer d'utilisateur/base de données avec la commande \c comme \c template1, \c postgres postgres et utiliser \d, \dt ou \dS pour voir les tables/vues/etc.

174voto

Milen A. Radev Points 20462

(Pour l'exhaustivité)

Vous pouvez également interroger le schéma d'information (SQL standard) :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3 votes

+1 bien que pour des raisons de complétude, MySQL show tables ne montre que le schéma actuel, il est bon de le considérer de cette manière, MySQL n'a qu'une seule base de données mais plusieurs schémas, là où PostgreSQL peut avoir plusieurs bases de données (catalogues) et schémas. Donc l'équivalent devrait être table_schema='NOM_DB';

0 votes

Pas exactement du SQL standard, impossible d'utiliser "||" pour concaténer des chaînes sur MSSQL

7 votes

@ChRoNoN : c'est du SQL standard. || est l'opérateur de concaténation de chaînes dans la norme SQL depuis 1983 - c'est MS SQL qui utilise un opérateur de concaténation de chaînes non standard.

56voto

nish Points 688
  1. Tout d'abord, connectez-vous en tant qu'utilisateur postgres :

    sudo su - postgres

  2. Connectez-vous à la base de données requise : psql -d nomBaseDeDonnees

  3. \dt retournerait la liste de toutes les tables dans la base de données à laquelle vous êtes connecté.

46voto

bsb Points 515

Exécuter psql avec le drapeau -E permettra d'afficher la requête utilisée en interne pour implémenter \dt et similaire :

sudo -u postgres psql -E

postgres=# \dt       
********* REQUÊTE **********
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' 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;        
**************************

2 votes

Au fait, TOAST est utilisé pour stocker de grandes valeurs : postgresql.org/docs/8.3/static/storage-toast.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X