Dapatkan kueri SQL yang setara untuk semua meta-perintah Postgres

11

Saya harap judulnya adalah deskriptif diri. Saya ingin dapat menerjemahkan entah bagaimana meta-perintah Postgres ke dalam kueri SQL yang mendasarinya, setidaknya untuk mempelajari lebih lanjut tentang Postgres dan cara menyimpan meta-info dalam tabel-tabelnya.

Adakah ide jika ini mungkin?

Misalnya:

Ketika terhubung ke CONTOH basis data, \dtdan SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;mengembalikan hasil yang sama.

Saya ingin mencari, jika mungkin, cara untuk mendapatkan nilai SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;saat memasukkan \dtke fungsi / makro / apa pun.

BogdanSorlea
sumber

Jawaban:

17

Mudah dan sangat berguna: Anda dapat meluncurkan psql dengan saklar yang tepat (-E) untuk mendapatkan informasi.

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;

Lihat http://www.postgresql.org/docs/current/static/app-psql.html untuk informasi lebih lanjut. Setelah di psql, Anda juga bisa mengatur variabel ECHO_HIDDEN .

KookieMonster
sumber
1
sangat menjanjikan! tetapi ketika saya mencoba untuk mendapatkan definisi tabel dengan 'psql -E mytable' ia melaporkan beberapa pertanyaan, tidak ada yang mengembalikan apa pun yang berguna ketika dikeluarkan secara individual, jadi sesuatu yang tidak dilaporkan sedang terjadi.
philwalk