Obtenir une requête SQL équivalente pour toute méta-commande Postgres


11

J'espère que le titre est auto-descriptif. Je veux pouvoir d'une manière ou d'une autre traduire n'importe quelle méta-commande Postgres dans sa requête SQL correspondante / sous-jacente, au moins pour en savoir plus sur Postgres et la façon dont il stocke les méta-informations dans ses tables.

Des idées si c'est possible?

Par exemple:

Lorsqu'il est connecté à la base de données EXAMPLE, \dtet SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;renvoie le même résultat.

Je veux trouver, si possible, un moyen d'obtenir la valeur SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;lors de la saisie \dtdans la fonction / macro / quoi que ce soit.

Réponses:


17

Facile et très utile: vous pouvez lancer psql avec le bon commutateur (-E) pour obtenir les informations.

me@mystation:~/ > psql -E 
psql (9.3.11)
Type "help" for help.
me@mystation # \d
********* QUERY **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' 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','v','m','S','f','')
      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;

Jetez un œil à http://www.postgresql.org/docs/current/static/app-psql.html pour plus d'informations. Une fois dans psql, vous pouvez également définir la variable ECHO_HIDDEN .


1
très prometteur! mais lorsque j'essaie d'obtenir une définition de table avec 'psql -E mytable', il signale plusieurs requêtes, dont aucune ne retourne quoi que ce soit d'utile lorsqu'elles sont émises individuellement, donc quelque chose de non signalé se produit.
philwalk
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.