PostgreSQL에서 현재 사용자가 소유 한 모든 스키마의 모든 테이블을 어떻게 나열합니까?


25

사용하여 모든 스키마의 모든 테이블을 나열 할 수 있습니다

> \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;

답변:


32

현재 사용자가 소유 한 테이블뿐만 아니라 현재 사용자가 액세스 할 수있는 모든 테이블이 나열됩니다.

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;

이것으로 충분합니다. 이로부터 my_tables라는 뷰를 만들 것입니다.
Peter Groves

좋은 대답 when 'm' then 'MATERIALIZED_VIEW'은 새로운 유형을 보여주기 위해 를 추가하는 것입니다.
Forbesmyester

또 다른 대답은 간결하지만 네임 스페이스를 제외 할 때 관련이있을 수 있습니다 .
mlt

18

질문에 대한 짧은 대답은 다음과 같습니다.

SELECT *
FROM pg_tables t
WHERE t.tableowner = current_user;

-3

이것 좀 봐. 모든 테이블 :

SELECT relname FROM pg_class WHERE relname !~ '^(pg_|sql_)' AND relkind = 'r';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.