PostgreSQL의 모든 스키마를 어떻게 나열합니까?


239

PostgreSQL v9.1을 사용할 때 SQL을 사용하여 모든 스키마를 어떻게 나열합니까?

나는 다음과 같은 내용을 기대하고 있었다.

SELECT something FROM pg_blah;

답변:


259

모든 스키마를 나열하려면 (ANSI) 표준 INFORMATION_SCHEMA를 사용하십시오.

select schema_name
from information_schema.schemata;

매뉴얼 에 대한 자세한 내용

대안 적으로 :

select nspname
from pg_catalog.pg_namespace;

매뉴얼의 pg_catalog에 대한 자세한 내용


250

psql명령 행을 사용할 때 command로 모든 스키마를 나열 할 수 있습니다 \dn.


감사. \ dn에 의해 반환 된 스키마 만 있으면 좋을 것입니다.하지만이 경우 libpq / libpqxx를 사용하여 연결되는 부트 스트랩 응용 프로그램을 작성하고 있으므로 CLI 액세스 권한이 없습니다.
Stéphane

1
무엇 이다 그, 스키마 \dn테이블에 반대 나열 \dt나열?
Tommy

8
@Tommy \dt는 공개 스키마에 대한 테이블을 나열합니다. 모든 스키마 사용 테이블 \dt *.*과 특정 스키마 사용 테이블을 표시하려면 \dt schema_name.*.
심각한

@Tommy에서 스키마는 네임 스페이스입니다. 네임 스페이스마다 이름이 다른 테이블이있을 수 있습니다.
eppesuig

38

psql 명령-> psql --u {userName} {DBName}에 연결 한 다음 아래 명령을 입력하여 DB에 존재하는 스키마 수를 확인할 수 있습니다.

DBName=# \dn

그렇지 않으면 아래 단계를 통해 구문을 쉽게 확인할 수 있습니다.

  1. DB 연결 후

    DBName=# help

다음과 같은 옵션이 제공됩니다.

PostgreSQL의 명령 행 인터페이스 인 psql을 사용하고 있습니다.
다음을 입력하십시오. \ 배포 조건에 대한 저작권
\ h SQL 명령에 대한 도움말
\? psql 명령
\ g에 대한 도움말 또는 세미콜론으로 종료하여 쿼리
\ q를 종료하여 종료

그런 다음

DBName=# \?

모든 옵션을 매우 쉽게 얻을 수 있습니다.


9

postgres 9.3부터 pgre에서 postgres에서 정보 명령의 정확한 SQL (\ d, \ du, \ dp 등)을 얻기 위해 사용할 수있는 트릭은 트랜잭션을 사용하는 것입니다. 트릭이 진행되는 방법은 다음과 같습니다. 하나의 postgres 세션을 열고 명령을 입력하십시오.

begin;
\dn+

트랜잭션이 계속 실행되는 동안 다른 postgres 세션을 열고 pg_stat_activity를 쿼리하면 정확한 SQL을 얻을 수 있습니다.

postgres=# select query from pg_stat_activity ;
                                 query                                 
-----------------------------------------------------------------------
 SELECT n.nspname AS "Name",                                          +
   pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",                 +
   pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
   pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
 FROM pg_catalog.pg_namespace n                                       +
 WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'      +
 ORDER BY 1;

12
속일 필요는 없습니다. 방금 실행\set ECHO_HIDDEN on
Nick Barnes

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