Quel est l'équivalent de show tables
(de MySQL) dans PostgreSQL?
@StephenCorwin Non, \l
est l'équivalent de show databases
en MySQL. dt
show tables
et l
show databases
Quel est l'équivalent de show tables
(de MySQL) dans PostgreSQL?
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
.
@StephenCorwin Non, \l
est l'équivalent de show databases
en MySQL. dt
show tables
et l
show databases
\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é.
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"
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.
(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');
+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';
Pas exactement du SQL standard, impossible d'utiliser "||" pour concaténer des chaînes sur MSSQL
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;
**************************
Au fait, TOAST est utilisé pour stocker de grandes valeurs : postgresql.org/docs/8.3/static/storage-toast.html
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.
0 votes
Voir dba.stackexchange.com/a/1288/90651