Quel est l'équivalent de show tables
(de MySQL) dans PostgreSQL?
Depuis l'interface de ligne de commande psql
, toutes les tables du schéma actuel sont affichées:
\dt
Par programme (ou à partir de l'interface psql
également, bien sûr):
SELECT * FROM pg_catalog.pg_tables;
Les tables système résident dans la base de données pg_catalog.
Connectez-vous en tant que superutilisateur:
Sudo -u postgres psql
Vous pouvez répertorier toutes les bases de données et tous les utilisateurs avec la commande \l
(répertoriez les 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.
(Pour être complet)
Vous pouvez également interroger le schéma (standard SQL) information :
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
Première connexion en tant qu'utilisateur postgres:
Sudo su - postgres
se connecter à la base de données requise: psql -d databaseName
\dt
renverrait la liste de toutes les tables de la base de données à laquelle vous êtes connecté.
Vous pouvez utiliser le terminal interactif Psql de PostgreSQL pour afficher les tables dans PostgreSQL.
1. Démarrer 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 la suivante: supposons que vous vous connectiez en tant que root et que vous ne vous souveniez pas du nom de la base de données. Vous pouvez simplement entrer en premier dans Psql en lançant:
Sudo -u postgres psql
Dans certains systèmes, la commande Sudo n'est pas disponible. Vous pouvez également exécuter l'une des commandes ci-dessous:
psql -U postgres
psql --username=postgres
2. Tables de spectacle
Maintenant, dans Psql, vous pouvez exécuter des commandes telles que:
\?
liste toutes les commandes\l
liste des bases de données\conninfo
afficher des informations sur la connexion en cours\c [DBNAME]
se connecter à la nouvelle base de données, par exemple, \c template1
\dt
tables de listeSELECT * FROM my_table;
(Remarque: une instruction doit être terminée par un point-virgule ;
)\q
quitter psqlL'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;
**************************
Si vous voulez seulement voir la liste des tables que vous avez créées, vous pouvez simplement dire:
\dt
Mais nous avons aussi PATTERN
qui vous aidera à personnaliser les tables à afficher. Pour tout afficher, y compris le schéma pg_catalog
, vous pouvez ajouter *
.
\dt *
Si vous le faites: \?
\ dt [S +] [PATTERN] tables de liste
Connectez-vous d'abord avec la base de données en utilisant la commande suivante
\c database_name
Et vous verrez ce message - You are now connected to database database_name
. Et les exécutent la commande suivante
SELECT * FROM table_name;
Dans nom_base_données et nom_table, mettez simplement à jour votre nom de base et de
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.*
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 arriver à Shell postgresql en utilisant la commande suivante: -
psql
Vous pouvez maintenant vérifier la liste de toutes les 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+
Une fois que vous avez trouvé votre base de données maintenant, vous pouvez vous connecter à cette base de données en utilisant la commande suivante: -
\c database_name
Une fois connecté, vous pouvez vérifier les tables de la base de données ou le schéma en: -
\d
Maintenant, pour revenir à l'utilisation de Shell: -
q
Maintenant, pour voir plus loin les détails d'une certaine utilisation de la table: -
\d table_name
Si vous utilisez pgAdmin4 dans PostgreSQL, vous pouvez utiliser ceci pour afficher les tables dans votre base de données:
select * from information_schema.tables where table_schema='public';
Notez que \dt
seul listera les tables dans le schéma public 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 ne fonctionne pas pour moi.
Pour lister toutes les tables dans 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 souhaite voir les tables après la commande \dt
, 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
\ dt (no * required) - listera toutes les tables d'une base de données existante à laquelle vous êtes déjà connecté. Également utile de noter:
\ d [nom_table] - affiche toutes les colonnes d'une table donnée, y compris les informations de type, les références et les contraintes de clé.
Vous pouvez répertorier les tables de la base de données actuelle avec \dt
.
Fwiw, \d tablename
affichera des détails sur la table donnée, quelque chose comme show columns from tablename
dans MySQL, mais avec un peu plus d’informations.
select * from pg_catalog.pg_tables
where schemaname != 'information_schema' and schemaname != 'pg_catalog';
Utiliser 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
Tout d’abord, vous devez vous connecter avec 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 "."
À présent
Exécutez cette commande pour afficher toutes les tables qu'il contient.
\d+
\ dt listera les tables et "\ pset pager off" les affichera dans la même fenêtre, sans passer à une autre. Aimez cette fonctionnalité à mort dans dbshell.
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'
Pour afficher des tables étrangères dans psql, exécutez \dE