postgresql information_schema의 모든 테이블을 나열하십시오.


200

PostgreSQL의 information_schema 내의 모든 테이블을 나열하는 가장 좋은 방법은 무엇입니까?

명확히하기 위해 : 빈 DB로 작업하고 있지만 (내 테이블을 추가하지 않았습니다) information_schema 구조의 모든 테이블을보고 싶습니다.

답변:


276

select * from information_schema.tables특정 데이터베이스에 대해 Postgres가 관리하는 모든 테이블 목록을 가져 오기 위해 실행할 수 있어야 합니다.

where table_schema = 'information_schema'정보 스키마의 테이블 만 보려면를 추가 할 수도 있습니다 .


4
고마워, 방금 시도했다 : / dt (별표). (별표)는 다른가요?
littleK

나는 / dt (별표)에 대해 아무것도 모른다. (별표), 죄송합니다. 방금 postgres에서 select 쿼리를 실행했으며 그 안에 모든 테이블에 대한 정보가 나열되었습니다. (빈 DB에서) select 문을 실행하여 무엇이 반환되는지 확인하십시오.
RodeoClown

위의 명령을 시도하면 information_schema에 다음 테이블이 나열됩니다.
littleK

2
/ dt 명령을 통해 나열한 모든 테이블은 데이터베이스에 대한 메타 정보를 제공합니다. 나열된 각 표는 다른 정보를 보여줍니다. 예를 들어 information_schema.tables 테이블은 데이터베이스의 모든 테이블과 해당 속성 (예 : 테이블 또는 뷰인지 여부, 이름 및 기타 정보 등)을 나열합니다. information_schema.sql_features 테이블은 데이터베이스에서 활성화 된 기능을 보여줍니다 (따라서 직접 SQL뿐만 아니라 데이터베이스에서 Embedded C가 지원됨을 알 수 있습니다).
RodeoClown

1
dt 명령으로 나열된 각 테이블에서 select *를 실행할 수 있습니다. 데이터베이스에 메타 데이터가 포함 된 테이블 목록이 표시되었습니다.
RodeoClown

112

테이블을 나열하려면 다음을 사용하십시오.

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

생성 한 테이블 만 나열됩니다.


작성하지 않았지만 액세스 권한이있는 테이블은 어떻습니까?
huy

4
공용 스키마의 테이블 만 표시됩니다. 다른 스키마에서 테이블을 만들 수 있습니다.
Joe Van Dyk

또한 이것은 테이블과 뷰를 구별하지 않습니다.
jayarjo

44
\dt information_schema.

psql 내에서 괜찮을 것입니다.


14

\ "Z"명령은 또한 목록 테이블 때 대화 형 psql의 세션 내부에 좋은 방법입니다.

예.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
public 이외의 스키마에는 테이블이 표시되지 않습니다 .
Kenny Evitt

10

당신은 또한 사용할 수 있습니다

select * from pg_tables where schemaname = 'information_schema'

일반적으로 pg * 테이블을 사용하면 권한에 제한되지 않고 (물론 테이블에 액세스 할 수있는 경우) db의 모든 내용을 볼 수 있습니다.


9

'xxx'postgresql의 개인 스키마 :

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

이 없으면 table_type = 'BASE TABLE'테이블과 뷰를 나열 합니다.


8

1. information_schema.tables에서 모든 테이블과 뷰를 가져옵니다. information_schema 및 pg_catalog를 포함합니다.

select * from information_schema.tables

2.get 테이블 및 뷰는 특정 스키마에 속합니다.

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3.get 테이블 만 (거의 \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

table_type으로 필터링하지 않으면 테이블 및 뷰와 같은 모든 종류의 객체가 혼합됩니다.
russellhoff

정확히 무엇입니까 where table_schema not in ('information_schema', 'pg_catalog')?
jayarjo

1

빠르고 더러운 단일 라이너 쿼리를 원할 경우 :

select * from information_schema.tables

psql을 열지 않고도 Query 도구에서 직접 실행할 수 있습니다.

(다른 게시물은 더 좋은 information_schema 쿼리를 제안하지만 새로운 것은이 one-liner 쿼리가 테이블을 파악하는 데 도움이된다는 것을 알았습니다)

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