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.