を使用してすべてのスキーマのすべてのテーブルを一覧表示できます
> \dt *.*
しかし、これには、気になるテーブルよりも数が多いシステムテーブルもリストされます。パブリックスキーマおよび定義したスキーマで自分が作成したすべてのテーブル(およびビュー)が欲しいのですが。
ここで説明するようにスキーマを作成するときに、検索パスにスキーマを明示的に追加する必要なく、これを行う方法を見つけたいと思っています。
https://stackoverflow.com/a/12902069
編集:
受け入れられた回答に基づいて、次のビューを作成しました。
create view my_tables as
select table_catalog, table_schema, table_name, table_type
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema');
そして今、次のコマンドは私が欲しかったものを与えます:
select * from my_tables;
これにより、現在のユーザーが所有しているテーブルだけでなく、現在のユーザーがアクセスできるすべてのテーブルがリストされます。
select *
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema')
and table_schema not like 'pg_toast%'
(not like 'pg_toast%'
は実際には必要です。)
私は本当に所有者情報が必要です。おそらくpg_class
および関連テーブル。
編集:これは所有者情報を含むクエリです:
select nsp.nspname as object_schema,
cls.relname as object_name,
rol.rolname as owner,
case cls.relkind
when 'r' then 'TABLE'
when 'm' then 'MATERIALIZED_VIEW'
when 'i' then 'INDEX'
when 'S' then 'SEQUENCE'
when 'v' then 'VIEW'
when 'c' then 'TYPE'
else cls.relkind::text
end as object_type
from pg_class cls
join pg_roles rol on rol.oid = cls.relowner
join pg_namespace nsp on nsp.oid = cls.relnamespace
where nsp.nspname not in ('information_schema', 'pg_catalog')
and nsp.nspname not like 'pg_toast%'
and rol.rolname = current_user --- remove this if you want to see all objects
order by nsp.nspname, cls.relname;
質問への短い答えは次のようになります:
SELECT *
FROM pg_tables t
WHERE t.tableowner = current_user;