システムカタログで管理されているオブジェクトはidで不便
特にpg_class
ですが、列にrelowner
やrelnamespace
というカラムありますが、idなので
確認するときは、わざわざ別カタログから名称を取得してました。。
こんな感じで
select
r.rolname as owner, -- オーナ名
n.nspname as schema, -- スキーマ名
c.relname as name
from pg_class c
inner join pg_roles r on r.oid = c.relowner
inner join pg_namespace n on n.oid = c.relnamespace
where
r.rolname = 'postgres'
and c.relkind = 'r'
これを「オブジェクト識別子データ型」を使うとこうなります。
select
c.relowner::regrole as owner, -- オーナ名
c.relnamespace::regnamespace as schema, -- スキーマ名
c.relname as name
from pg_class c
where
c.relowner = 'postgres'::regrole
and c.relkind = 'r'
めちゃくちゃスッキリした!!
以上です。