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.

Mihai Limbășan
la source
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.

JLarky
la source
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');
Milen A. Radev
la source
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
Yuci
la source
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é.

nish
la source
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;        
**************************
bsb
la source
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.

Shashishekhar Hasabnis
la source
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

Banned_User
la source
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.* 
aryen
la source
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

J4cK
la source
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';
Reynante Daitol
la source
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
cadran rotatif
la source
12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';
Abdelhak Ohammou
la source
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é.

user4642897
la source
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.

JohnK
la source
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
MonsieurJoyson
la source
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+
Usman Yaqoob
la source
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.

Alain Cherpin
la source
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
Yordan Georgiev
la source
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.

lauri108
la source
0

Pour afficher les tables étrangères dans psql, exécutez \dE

Ian Hunter
la source
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
Poonkodi
la source
-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

Patcho
la source