PostgreSQL 스키마의 테이블 나열


329

\dtpsql에서 수행 할 때 현재 스키마의 테이블 목록 만 가져옵니다 ( public기본적으로).

모든 스키마 또는 특정 스키마의 모든 테이블 목록을 얻으려면 어떻게해야합니까?

답변:


505

모든 스키마에서 :

=> \dt *.*

특정 스키마에서 :

=> \dt public.*

몇 가지 제한이있는 정규식 을 사용할 수 있습니다

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

고급 사용자는 문자 클래스와 같은 정규식 표기법 (예 : [0-9])을 사용하여 모든 숫자와 일치시킬 수 있습니다. 섹션 9.7.3에 규정 된 모든 정규 표현식 특수 문자를 제외하고를 위해 작동 .하는 위에서 언급 한 바와 같이 분리기으로한다 *정규 표현식 표기로 변환되어 .*, ?로 번역 .하고, $문자 그대로 일치한다. ?for ., (R+|)for R*또는 (R|)for 를 작성하여 필요에 따라 이러한 패턴 문자를 에뮬레이트 할 수 있습니다 R?. $정규 표현식의 일반적인 해석과 달리 패턴이 전체 이름과 일치해야하므로 정규 표현식 문자로 필요하지 않습니다.$패턴에 자동으로 추가됩니다). *패턴을 고정하지 않으려면 시작 및 / 또는 끝 부분에 쓰십시오 . 큰 따옴표 내에서 모든 정규 표현식 특수 문자는 특별한 의미를 잃고 문자 그대로 일치합니다. 또한 정규 표현식 특수 문자는 문자 그대로 연산자 이름 패턴에서 일치합니다 (예 :의 인수 \do).


6
간단히 \dt동일합니다 \dt public.*. 맞습니까?
Frozen Flame

예를 들어 특정 스키마에있는 두 개의 특정 테이블은 어떻습니까? 처럼 \dt public.user_info, public.user_scope?
James M. Lay

\dt public.a; \dt public.b;한 줄로 하는 것이 더 쉽습니다 .
James M. Lay

\ dt가 "공개"테이블 만 제공하면 정규 표현식을 통해 더 이상 아무것도 기대하지 않을 것입니다.
mehmet

1
@FrozenFlame 아닙니다! 기본적으로 그것은 당신에 어떤 프로그램으로 search_path, 그리고 기본값 "$user", public.*. 결과적으로 set search_path=s; \dt스키마의 모든 테이블을 나열합니다 s.
Lukas Juhrich

257

당신은 테이블을 선택할 수 있습니다 information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

6
인터페이스가 단축키를 지원하지 않는 경우 매우 유용합니다. 감사.
Matt Bannert

1
이것은 select table_schema, information_schema.tables에서 table_name과 같은 것을 할 수 있기 때문에 좋습니다. 여기서 table_name은 '% whatever %'; 테이블이 어떤 스키마에 있는지 알아야 할 경우 \ dt를 사용하여이를 수행 할 수 있는지 확실하지 않습니다.
Josh Brown

2
감사합니다 .Amazon Redshift에서는 작동하지만 \ dt (허용 된 답변)에서는 작동하지 않습니다.
Carlos2W

2
가장 일반적으로 유용한 답변입니다. information_schema는 SQL 표준에 정의되어 있으며 대부분의 데이터베이스에서 사용할 수 있습니다.
Davos

54

또는 다음을 information_schema사용할 수 있습니다 pg_tables.

select * from pg_tables where schemaname='public';

3
테이블 이름 만 원하는 경우 결과 쿼리입니다.SELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries

스키마 information_schema에서 항목을 나열하지 않는 권한 문제를 찾았 public지만이 pg_tables방법은 훌륭하게 작동했습니다. 많은 감사합니다!
John Crawford

8

앞으로이 문제가 발생하는 사람들을 위해 :

여러 스키마에 대한 관계 목록을 보려면 다음을 수행하십시오.

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.