Postgresメタコマンドの同等のSQLクエリを取得する


11

タイトルはわかりやすいものにしてください。Postgresのメタコマンドを対応する/基になるSQLクエリに何らかの形で変換できるようにしたいのですが、少なくともPostgresと、テーブルにメタ情報を格納する方法について詳しく知りたいのです。

これが可能である場合、何かアイデアはありますか?

例えば:

データベースEXAMPLEに接続する\dtSELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;、同じ結果が返されます 。

可能であれば、関数/マクロ/何でもSELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;入力\dtするときに値を取得する方法を見つけたいです。

回答:


17

簡単で非常に便利です。適切なスイッチ(-E)を使用してpsqlを起動し、情報を取得できます。

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;

詳細については、http://www.postgresql.org/docs/current/static/app-psql.htmlをご覧ください。psqlに入ったら、ECHO_HIDDEN変数を設定することもできます。


1
非常に有望です!しかし、「psql -E mytable」を使用してテーブル定義を取得しようとすると、いくつかのクエリが報告されますが、どれも個別に発行した場合に役立つものは何も返されないため、報告されない問題が発生しています。
philwalk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.