PostgreSQL: afficher les tableaux dans PostgreSQL


Réponses:


2661

Depuis l' psqlinterface de ligne de commande,

Choisissez d'abord votre base de données

\c database_name

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

\dt

Par programmation (ou depuis l' psqlinterface aussi, bien sûr):

SELECT * FROM pg_catalog.pg_tables;

Les tables système vivent dans la pg_catalogbase de données.


102
@StephenCorwin Non, \lest l'équivalent de show databasesdans MySQL. dtshow tableset lshow databases
user454322

12
\dtest très utile. Celui- pg_catalog.pg_tablesci l'est beaucoup moins, car il semble regrouper les tables internes avec celles créées par l'utilisateur pour la base de données à laquelle vous vous connectez.
aroth

33
psql my_db_namedoit être exécuté \dtpour fonctionner. Lorsque j'ai couru psqlsans nom de base de données, j'ai reçu un message "Aucune relation trouvée"
Maksim Dmitriev

31
Sans tables système:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
Vous devez d'abord \c <DATABASE_NAME>choisir votre base de données.
danio

201

Connectez-vous en tant que superutilisateur:

sudo -u postgres psql

Vous pouvez lister toutes les bases de données et tous les utilisateurs par \lcommande, (lister les autres commandes par\? ).

Maintenant, si vous voulez voir d'autres bases de données, vous pouvez changer d'utilisateur / base de données par \ccommande comme \c template1, \c postgres postgreset utiliser \d, \dtou \dSvoir tables / vues / etc.


1
C'est une meilleure réponse, car on peut généralement avoir plus d'une base de données installée.
Jerome

Ce fut très utile. Je vous remercie.
Promise Preston

123

(Pour être complet)

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

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

3
+1 bien que pour être complet, mysql affiche les tableaux ne montre que le schéma actuel, il est bon de penser de cette façon, mysql n'a qu'une seule base de données mais plusieurs schémas, où postgresql peut avoir plusieurs bases de données (catalogues) et schémas. Ainsi, l'équiv doit être table_schema = 'DB_NAME';
Rahly

Pas exactement SQL standard, ne peut pas utiliser "||" concaténer des chaînes sur mssql
ChRoNoN

123

Vous pouvez utiliser le terminal interactif Psql de PostgreSQL pour afficher des tableaux dans PostgreSQL.

1. Démarrez Psql

Habituellement, vous pouvez exécuter la commande suivante pour entrer dans psql:

psql DBNAME USERNAME

Par exemple, psql template1 postgres

Une situation que vous pourriez avoir est: supposez que vous vous connectez en tant que root et que vous ne vous souvenez pas du nom de la base de données. Vous pouvez simplement entrer d'abord dans Psql en exécutant:

sudo -u postgres psql

Dans certains systèmes, la commande sudo n'est pas disponible, vous pouvez plutôt exécuter l'une des commandes ci-dessous:

psql -U postgres
psql --username=postgres

2. Montrer les tableaux

Maintenant, dans Psql, vous pouvez exécuter des commandes telles que:

  1. \? liste toutes les commandes
  2. \l liste des bases de données
  3. \conninfo afficher des informations sur la connexion actuelle
  4. \c [DBNAME] se connecter à une nouvelle base de données, par exemple, \c template1
  5. \dt lister les tables du schéma public
  6. \dt <schema-name>.* lister les tableaux de certains schémas, par exemple, \dt public.*
  7. \dt *.* liste des tableaux de tous les schémas
  8. Ensuite, vous pouvez exécuter des instructions SQL, par exemple, SELECT * FROM my_table;(Remarque: une instruction doit se terminer par un point-virgule ;)
  9. \q quitter psql

52
  1. Première connexion en tant qu'utilisateur postgres:

    sudo su - postgres

  2. se connecter à la base de données requise: psql -d databaseName

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


40

L'exécution de psql avec l'indicateur -E fera écho à la requête utilisée en interne pour implémenter \ dt et similaire:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
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;        
**************************

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

39

Connectez-vous en tant que superutilisateur pour pouvoir vérifier toutes les bases de données et leurs schémas: -

sudo su - postgres

Ensuite, nous pouvons accéder au shell postgresql en utilisant la commande suivante: -

psql

Vous pouvez maintenant vérifier toute la liste des bases de données en utilisant la commande suivante: -

\l

Si vous souhaitez également vérifier la taille des bases de données, utilisez: -

\l+

Appuyez qpour revenir.

Une fois que vous avez trouvé votre base de données, vous pouvez maintenant vous connecter à cette base de données à l'aide de la commande suivante: -

\c database_name

Une fois connecté, vous pouvez vérifier les tables ou le schéma de la base de données en: -

\d

Maintenant, pour revenir à l'utilisation du shell: -

q

Maintenant, pour voir les détails d'une certaine table, utilisez: -

\d table_name

Pour revenir à la presse postgresql_shell \q.

Et pour revenir au terminal, appuyez sur exit.


24

Si vous voulez seulement voir la liste des tableaux que vous avez créés, vous pouvez seulement dire:

\dt

Mais nous avons également PATTERNce qui vous aidera à personnaliser les tableaux à afficher. Pour afficher tous les pg_catalogschémas, y compris , vous pouvez ajouter *.

\dt *

Si tu fais: \?

\ dt [S +] [PATTERN] list tables


23

utiliser seulement voir une table

=> \dt

si vous voulez voir les tables de schéma

=>\dt+

si vous voulez voir des tables de schéma spécifiques

=>\dt schema_name.* 

Je suis à peu près sûr que vous confondez +avec S. Ce dernier (la lettre) montre des tables de schéma. Le +montre simplement des informations supplémentaires.
Garret Wilson

20

Connectez-vous d'abord à la base de données à l'aide de la commande suivante

\c database_name

Et vous verrez ce message - You are now connected to database database_name. Et ils exécutent la commande suivante

SELECT * FROM table_name;

Dans nom_base_de_données et nom_table, mettez à jour simplement avec votre nom de base de données et de table


20
Je ne suis pas sûr que cela réponde à la question. Je pense que l'OP essaie (était) de connaître toutes les tables de sa base de données, pas d'obtenir toutes les lignes d'une table particulière dans sa base de données ... non?
blottit

16

Si vous utilisez pgAdmin4 dans PostgreSQL, vous pouvez l'utiliser pour afficher les tables de votre base de données:

select * from information_schema.tables where table_schema='public';

14

Notez que \dtseul listera les tables dans le public schéma de la base de données que vous utilisez. J'aime garder mes tables dans des schémas séparés, donc la réponse acceptée n'a pas fonctionné pour moi.

Pour répertorier toutes les tables d' un schéma spécifique , je devais:

1) Connectez-vous à la base de données souhaitée:

psql mydb

2) Spécifiez le nom du schéma pour lequel je veux voir les tables après la \dtcommande, comme ceci:

\dt myschema.*

Cela me montre les résultats qui m'intéressent:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres

12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';

8

\ dt (non * requis) - listera toutes les tables d'une base de données existante à laquelle vous êtes déjà connecté. A noter également:

\ d [nom_table] - affichera toutes les colonnes d'une table donnée, y compris les informations de type, les références et les contraintes de clé.


6

Vous pouvez répertorier les tables de la base de données actuelle avec \dt .

Fwiw, \d tablenameaffichera des détails sur la table donnée, quelque chose comme show columns from tablenamedans MySQL, mais avec un peu plus d'informations.


5

Utilisation de psql : \ dt

Ou:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

Tout d'abord, vous devez vous connecter à votre base de données comme

ma base de données est ubuntu

utilisez cette commande pour vous connecter

 \c ubuntu

Ce message montrera

"Vous êtes maintenant connecté à la base de données" ubuntu "en tant qu'utilisateur" postgres "."

Maintenant

Exécutez cette commande pour afficher toutes les tables qu'il contient

\d+

3

La façon la plus simple de répertorier toutes les tables en ligne de commande est, à mon goût:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Pour une base de données donnée, ajoutez simplement le nom de la base de données:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Cela fonctionne sur Linux et Windows.


3

comme oneliner rapide

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

ou si vous préférez une sortie json multi-liner beaucoup plus claire:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq

1

\ dt répertorie les tables et "\ pset pager off" les affiche dans la même fenêtre, sans passer à une autre. J'adore cette fonctionnalité à mort dans dbshell.



0

Tout d'abord, entrez la base de données dont vous avez besoin pour vous connecter

\c database_name

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

\dt

-2

Vous pouvez d'abord vous connecter à votre base de données postgres en utilisant postgre.app sur mac ou en utilisant postico. Exécutez la commande suivante:

psql -h localhost -p port_number -d database_name -U user_name -W

puis vous entrez votre mot de passe, cela devrait donner accès à votre base de données

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.