Ruft eine entsprechende SQL-Abfrage für einen Postgres-Metabefehl ab

11

Ich hoffe, der Titel ist selbsterklärend. Ich möchte in der Lage sein, jeden Postgres-Meta-Befehl irgendwie in die entsprechende / zugrunde liegende SQL-Abfrage zu übersetzen, zumindest um mehr über Postgres und die Art und Weise zu erfahren, wie Meta-Informationen in seinen Tabellen gespeichert werden.

Irgendwelche Ideen, ob dies möglich ist?

Z.B:

Wenn Sie mit der Datenbank verbunden sind, BEISPIEL, \dtund SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;geben Sie das gleiche Ergebnis zurück.

Ich möchte, wenn möglich, einen Weg finden, um den Wert SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;bei der Eingabe \dtin die Funktion / das Makro / was auch immer zu erhalten.

BogdanSorlea
quelle

Antworten:

17

Einfach und sehr nützlich: Sie können psql mit dem richtigen Schalter (-E) starten, um die Informationen zu erhalten.

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;

Werfen Sie einen Blick auf http://www.postgresql.org/docs/current/static/app-psql.html für weitere Informationen. In psql können Sie auch die Variable ECHO_HIDDEN festlegen .

KookieMonster
quelle
1
sehr vielversprechend! Wenn ich jedoch versuche, eine Tabellendefinition mit 'psql -E mytable' zu erhalten, werden mehrere Abfragen gemeldet, von denen keine etwas Nützliches zurückgibt, wenn sie einzeln ausgegeben werden, sodass etwas Unberichtetes passiert.
Philwalk