psql을 사용하여 모든 데이터베이스와 테이블을 어떻게 나열합니까?


1171

PostgreSQL 관리를 배우려고 노력 중이며 psql명령 줄 도구 사용법을 배우기 시작했습니다 .

로 로그인하면 psql --username=postgres모든 데이터베이스와 테이블을 어떻게 나열합니까?

나는 시도 \d, d그리고 dS+아무것도 나열되지 않습니다. pgAdmin III으로 두 개의 데이터베이스와 몇 개의 테이블을 만들었으므로 나열해야한다는 것을 알고 있습니다.


1
명령 행을 통해 액세스하려면psql -l
— adriaan

이 의견은 분명히 최고의 답변 중 하나 여야합니다! 인증이 필요한 경우에도 할 수 있습니다 psql --username=postgres -l.
— Ulysse BN

답변:


1543

다음 명령을 참고하십시오 :

  • \list또는 \l: 모든 데이터베이스 나열
  • \dt: 현재 데이터베이스의 모든 테이블을 나열합니다.

다른 데이터베이스에는 테이블이 표시되지 않으며이 테이블은 표시되지 않습니다. 테이블 (및 기타 오브젝트)을 보려면 올바른 데이터베이스에 연결해야합니다.

데이터베이스를 전환하려면 다음을 수행하십시오.

\connect database_name 또는 \c database_name

psql에 대한 매뉴얼을 참조하십시오 .


131
\c db_name특정 데이터베이스에 연결하는 데 사용할 수 있습니다 .
— 08

17
\dt현재 데이터베이스의 모든 테이블을 표시하지 않는 것 같습니다 ( search_path최소 9.2에 없는 테이블은 제외하는 것 같습니다 )
— Jack Douglas

22
\dt *.검색 경로를 수정하지 않고 모든 스키마의 모든 테이블을 나열합니다.
— danpelota

19
\ l +는 내가 가장 좋아하는 것입니다. 디스크 사용량도 보여줍니다.
— Lester Cheung

1
Windows에서는이 명령으로 데이터베이스를 나열 할 수 psql -U username -l있지만 슬래시 버전에서는 작동하지 않습니다.
— 없음

350

데이터베이스가 나열됩니다.

SELECT datname FROM pg_database
WHERE datistemplate = false;

현재 데이터베이스의 테이블을 나열합니다.

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

11
당신 말이 맞지만 문제는 psql-tool의 메타 명령에 관한 것이었다. \ dt는 쿼리를 입력하는 것보다 훨씬 쉽습니다.
— Frank Heikens

19
필자는 ExtraPutty를 사용하여 때로는 psql 인터프리터에 있어야하는 대신 Linux 명령 줄에서 실행할 수 있기 때문에 이것이 위대한 대답이라고 생각합니다.
— 사랑과 평화-Joe 코드 웰

2
또한 내 하루를 구했습니다. 내 경우에는 WHERE table_schema = 'public'맞춤 테이블 만 삭제하고 싶기 때문에 추가 하고 있습니다.
— Renra

29
-E 플래그와 함께 psql을 시작하면 메타 명령을 사용할 때 실제 쿼리가 표시됩니다.
— Deebster

이것은 좋은 대답입니다. OP가 메타 명령을 원했지만 나는 이것을 인터넷 검색하고 있었고이 질문으로 이끌었습니다.
— 계정

109

Postgresql에서이 터미널 명령은 사용 가능한 데이터베이스를 나열합니다

el@defiant$ /bin/psql -h localhost --username=pgadmin --list

또는 명령이 더 간단하게 언급했습니다.

psql -U pgadmin -l

이러한 명령은 이것을 터미널에 인쇄합니다.

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 kurz_prod | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 pgadmin   | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

사용 가능한 데이터베이스입니다.

PSQL에서이 명령은 사용 가능한 테이블을 나열합니다.

해당 데이터베이스의 테이블을 나열하기 전에 데이터베이스를 지정해야합니다.

el@defiant$ psql -U pgadmin -d kurz_prod

그러면 psql 터미널이 나타납니다.

kurz_prod=#

\d모든 테이블, 뷰 및 시퀀스 표시를 의미 하는 명령 사용

kurz_prod=# \d

인쇄합니다 :

           List of relations
Schema |  Name   |   Type   |  Owner
--------+---------+----------+---------
public | mytable | table    | pgadmin
public | testing | sequence | pgadmin
(2 rows)

그런 다음 psql 터미널을 종료하려면 입력 \q하고 Enter를 누르십시오. 아니면 Ctrl-D같은 일을합니다. 이들은 해당 데이터베이스의 테이블입니다.


4
\ d는 \d[S+] list tables, views, and sequences
— Jack Douglas

3
나에게 이것은 기존 데이터베이스에 이미 연결되어 있지 않아도되기 때문에 "정답"입니다.
— aardvarkk

71

\l또한 속기입니다 \list. 꽤 많은 슬래시 명령이 있는데,이를 사용하여 psql에 나열 할 수 있습니다 \?.


35

데이터베이스 및 테이블 목록에 대한 자세한 정보를 얻으려면 다음을 수행하십시오.

\l+ 데이터베이스를 나열

                                                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pgbench    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 29 MB   | pg_default |
 postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6073 kB | pg_default | default administrative connection database
 slonmaster | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1401 MB | movespace  |
 slonslave  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 32 MB   | pg_default |
 template0  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5785 kB | pg_default | unmodifiable empty database
            |          |          |             |             | postgres=CTc/postgres |         |            |
 template1  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5985 kB | pg_default | default template for new databases
            |          |          |             |             | postgres=CTc/postgres |         |            |
 test       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 13 MB   | pg_default |
(7 rows)

과

\d+ 현재 데이터베이스의 현재 search_path 스키마에있는 모든 테이블을 나열합니다.

test=# \dn+ --list schemas
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
schema1 | postgres | postgres=UC/postgres+| 
        |          | =UC/postgres         | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                                  List of relations
     Schema  |      Name       | Type  |    Owner     |    Size    | Description
    ---------+-----------------+-------+--------------+------------+-------------
     public  | all_units       | table | postgres     | 0 bytes    |
     public  | asset           | table | postgres     | 16 kB      |
     public  | asset_attribute | table | postgres     | 8192 bytes |
     public  | food            | table | postgres     | 48 kB      |
     public  | name_log        | table | postgres     | 8192 bytes |
     public  | outable         | table | ordinaryuser | 0 bytes    |
     public  | outable2        | table | ordinaryuser | 0 bytes    |
     public  | test            | table | postgres     | 16 kB      |
     public  | usr             | table | postgres     | 5008 kB    |
     schema1 | t1              | table | postgres     | 0 bytes    |
    (10 rows)

33

pg_Admin에서 현재 데이터베이스에서 간단히 다음을 실행하면 지정된 스키마에 대한 모든 테이블을 가져옵니다.

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
    AND table_schema = 'public' 
ORDER BY table_type, table_name

이렇게하면 모든 영구 테이블 (일반적으로 찾고있는 테이블)의 목록이 표시됩니다. *와일드 카드를로 변경하면 테이블 이름 만 얻을 수 있습니다 table_name. table_schema관리자가 새 스키마를 설정하지 않은 경우 공용 은 대부분의 데이터베이스에 대한 기본 스키마입니다.


3
이것은 사실이지만 OP가 요청한 것과 다른 클라이언트를 처리합니다.
— dezso

이것은 나에게 큰 도움이되었으며 내 유스 케이스가 OP가 요청한 것과 정확히 일치하지는 않았지만 랩퍼를 통해 연결되는 동안 테이블 목록을 얻는 데 도움이되었습니다 ( Julialang LibPQ.jl )
— Vass

19

검색 경로에없는 스키마 또는 기본값 (예 : public)에 테이블을 삽입했을 수 있으므로 \ dt를 사용하여 테이블이 표시되지 않을 수 있습니다. 예를 들어 data라는 스키마를 사용하는 경우 다음을 실행하여이 문제를 해결할 수 있습니다.

alter database <databasename> set search_path=data, public;

psql을 종료하고 다시 입력하면 \ dt는 스키마 데이터의 테이블도 표시합니다.


1
글쎄, 간단한 set search_path=data, public;트릭도 할 것입니다 :)
— dezso

@dezso, 그것이 영구적으로 변경됩니까, 아니면 해당 psql 세션에서 변경됩니까?
— John Powell

Err, 나는 명확하지 않았다. 로그 아웃 로그인주기 대신 사용되었습니다.
— dezso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.