모든 테이블 이름을 나열하는 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.