모든 테이블 이름을 나열하는 PostgreSQL 쿼리?


184

Postgres DB의 모든 테이블을 나열하는 데 사용할 수있는 쿼리가 있습니까?

나는 다음과 같은 하나의 쿼리를 시도했다.

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

그러나이 쿼리는 뷰도 반환합니다.

뷰가 아닌 테이블 이름 만 얻을 수 있습니까?

답변:


307

이 검색어에 대한 설명은 무엇입니까 ( manual 의 설명에 따라 )?

SELECT table_name
  FROM information_schema.tables
 WHERE table_schema='public'
   AND table_type='BASE TABLE';

4
이것이 가장 좋은 대답입니다.
Tommy

3
테이블 타입은 무엇입니까?
Bryan Bryce

매뉴얼의 table_type : 테이블 유형 : 지속적 기본 테이블 (일반 테이블 유형)의 경우 BASE TABLE, 뷰의 경우 VIEW, 외부 테이블의 경우 FOREIGN 또는 임시 테이블의 경우 LOCAL TEMPORARY
tzachs

38

데이터베이스 목록을 원한다면

SELECT datname FROM pg_database WHERE datistemplate = false;

모든 데이터베이스의 현재 pg 설치에서 테이블 목록을 원할 경우

SELECT table_schema,table_name FROM information_schema.tables
ORDER BY table_schema,table_name;

적어도 Postgres 9.5에서는 그렇지 않습니다. 하나의 클러스터에 3 개의 데이터베이스가 있으며 현재 데이터베이스에서 테이블 만 반환합니다.
sudo

설명서에는 현재 문서 만 나와 있습니다. postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog sql_identifier 테이블을 포함하는 데이터베이스 이름 (항상 현재 데이터베이스)"
sudo

28

원하는 데이터베이스를 사용하여 postgres 터미널을 엽니 다.

psql dbname (run this line in a terminal)

그런 다음 postgres 환경에서이 명령을 실행하십시오.

\d

이름별로 모든 테이블을 설명합니다. 기본적으로 이름 오름차순으로 된 테이블 목록입니다.

그런 다음 필드별로 테이블을 설명하기 위해 시도해 볼 수 있습니다.

\d tablename.

도움이 되었기를 바랍니다.


@wingedpanther 방법? 인덱스가없고 seq가없는 모든 테이블 \d 나열 하는 옵션 이 있습니다 ...?
Peter Krauss

5
\dt이 거기에 있지?
thoroc

11

이 시도:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema='public' AND table_type='BASE TABLE'

이것은 작동합니다!


나는 우리가 필요하다고 생각하지 않습니다 table_type='BASE TABLE'. 아마도 내가 틀렸을 것입니다. 정교하게 설명해 주시겠습니까?
abriggs

때로는 DB가 추가 연결 유용한 필터링 전류는 다음 과 TABLE_CATALOG = current_database ()
디에고 Scaravaggi

8
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'
  • pg_tables 에 대해서 더 읽어보세요.

1
pg_stat_user_tables사용하지 않으면 채워지지 않을 수 있습니다 track_activities. pg_tables또는 "공식"API를 사용하는 information_schema.table것이 훨씬 좋습니다.
a_horse_with_no_name 11


0
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';

MySQL의 경우 table_schema = 'dbName'이 필요하며 MSSQL의 경우 해당 조건을 제거하십시오.

"현재 사용자가 액세스 할 수있는 테이블과 뷰만 표시됩니다". 또한 많은 데이터베이스에 액세스 할 수 있고 결과를 특정 데이터베이스로 제한하려는 경우 AND table_catalog = 'yourDatabase'(PostgreSQL) 조건을 추가하여이를 달성 할 수 있습니다.

행 이름을 표시하는 머리글과 행 수를 표시하는 바닥 글을 제거하려면 명령 행 옵션 -t (--tuples-only의 약어)로 psql을 시작하거나 psql의 설정을 전환 할 수 있습니다 명령 줄을 \ t (\ pset tuples_only의 줄임말)로 표시합니다. 이는 예를 들어 \ g [| command]를 사용하여 출력을 다른 명령으로 파이핑 할 때 유용 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.