PostgreSQL : PostgreSQL에 테이블 표시


답변:


2660

로부터 psql명령 줄 인터페이스,

먼저 데이터베이스를 선택하십시오

\c database_name

그런 다음 현재 스키마의 모든 테이블을 보여줍니다.

\dt

프로그래밍 방식으로 (또는 psql인터페이스에서도)

SELECT * FROM pg_catalog.pg_tables;

시스템 테이블은 pg_catalog데이터베이스에 있습니다.


102
@StephenCorwin 아니요, MySQL \l과 동일 show databases합니다. dtshow tableslshow databases
user454322

12
\dt매우 유용합니다. 즉, pg_catalog.pg_tables당신이에 연결하는 일이 어떤 데이터베이스 사용자가 생성 한 사람과 함께 내부 테이블 덩어리에 나타나는 일이 훨씬 덜합니다.
aroth

33
psql my_db_name\dt작동 하려면 실행해야합니다 . 내가 달릴 때 psql데이터베이스 이름없이, 나는 메시지 "아니 관계를 찾을 수"있어
막심 드미트리

31
시스템 테이블이없는 경우 :SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
먼저 \c <DATABASE_NAME>데이터베이스를 선택해야합니다.
danio

200

수퍼 유저로 로그인 :

sudo -u postgres psql

모든 데이터베이스와 사용자를 \l명령 별로 나열 할 수 있습니다 (다른 명령을로 나열 \?).

이제 당신은 당신이에 의해 사용자 / 데이터베이스를 변경할 수있는 다른 데이터베이스를보고 싶다면 \c같은 명령 \c template1, \c postgres postgres사용 \d, \dt또는 \dS/ 등 테이블 / 뷰를 볼 수 있습니다.


1
일반적으로 둘 이상의 데이터베이스가 설치되어 있기 때문에 더 나은 대답입니다.
Jerome

이것은 매우 도움이되었습니다. 감사합니다.
Promise Preston

123

(완전성을 위해)

(SQL 표준) 정보 스키마를 쿼리 할 수도 있습니다 .

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3
+1 완전성을 위해, mysql show table은 현재 스키마 만 보여줍니다.이 방법으로 생각하면 좋으며, mysql에는 데이터베이스가 하나 뿐이지 만 여러 스키마가 있습니다. postgresql은 다중 데이터베이스 (카탈로그) 및 스키마를 가질 수 있습니다. 따라서 equiv는 table_schema = 'DB_NAME'이어야합니다.
Rahly

정확히 표준 SQL이 아니고 "||"를 사용할 수 없습니다 mssql에서 문자열을 연결하는 방법
ChRoNoN

122

PostgreSQL의 대화식 터미널 Psql을 사용하여 PostgreSQL에 테이블을 표시 할 수 있습니다.

1. Psql 시작

일반적으로 다음 명령을 실행하여 psql에 입력 할 수 있습니다.

psql DBNAME USERNAME

예를 들어 psql template1 postgres

루트로 로그인하고 데이터베이스 이름을 기억하지 못한다고 가정하십시오. 다음을 실행하여 Psql에 먼저 들어갈 수 있습니다.

sudo -u postgres psql

일부 시스템에서는 sudo 명령을 사용할 수 없으며 대신 아래 명령 중 하나를 실행할 수 있습니다.

psql -U postgres
psql --username=postgres

2. 테이블 표시

이제 Psql에서 다음과 같은 명령을 실행할 수 있습니다.

  1. \? 모든 명령을 나열
  2. \l 데이터베이스 목록
  3. \conninfo 현재 연결에 대한 정보를 표시합니다
  4. \c [DBNAME] 예를 들어, 새로운 데이터베이스에 연결 \c template1
  5. \dt 공개 스키마의 테이블 목록
  6. \dt <schema-name>.* 특정 스키마의 테이블 목록 (예 : \dt public.*
  7. \dt *.* 모든 스키마의 테이블 목록
  8. 그런 다음 SQL 문을 실행할 수 있습니다 SELECT * FROM my_table;( 예 : 명령문은 세미콜론으로 끝나야합니다 ;)
  9. \q psql을 종료

52
  1. postgres 사용자로 처음 로그인 :

    sudo su - postgres

  2. 필요한 db에 연결하십시오. psql -d databaseName

  3. \dt 연결된 데이터베이스의 모든 테이블 목록을 반환합니다.


40

-E 플래그와 함께 psql을 실행하면 \ dt 등을 구현하기 위해 내부적으로 사용되는 쿼리가 에코됩니다.

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************

1
BTW, TOAST는 큰 값을 저장하는 데 사용됩니다. postgresql.org/docs/8.3/static/storage-toast.html
Dorian

39

모든 데이터베이스 및 스키마를 확인할 수 있도록 수퍼 유저로 로그인하십시오.

sudo su - postgres

그런 다음 다음 명령을 사용하여 postgresql 셸을 얻을 수 있습니다.

psql

이제 다음 명령을 사용하여 모든 데이터베이스 목록을 확인할 수 있습니다.

\l

데이터베이스의 크기를 확인하려면 다음을 사용하십시오.

\l+

q돌아가려면을 누르십시오 .

데이터베이스를 찾았 으면 다음 명령을 사용하여 해당 데이터베이스에 연결할 수 있습니다.

\c database_name

연결되면 다음을 통해 데이터베이스 테이블 또는 스키마를 확인할 수 있습니다.

\d

이제 쉘로 돌아가려면 다음을 사용하십시오.

q

이제 특정 테이블 사용에 대한 세부 정보를 더 보려면 :-

\d table_name

postgresql_shell로 돌아가려면을 누르십시오 \q.

터미널로 돌아가려면을 누르십시오 exit.


24

생성 한 테이블 목록 만 보려면 다음과 같이 말할 수 있습니다.

\dt

그러나 PATTERN표시 할 테이블을 사용자 정의하는 데 도움 이 되는 정보 도 있습니다 . pg_catalog스키마를 포함한 모든 것을 표시하려면 을 추가하면 *됩니다.

\dt *

당신이 할 경우 : \?

\ dt [S +] [PATTERN] 목록 테이블


23

테이블 만 사용하십시오

=> \dt

스키마 테이블을 보려면

=>\dt+

특정 스키마 테이블을 보려면

=>\dt schema_name.* 

나는 당신이 +와 혼동 하고 있다고 확신합니다 S. 후자 (문자)는 스키마 테이블을 보여줍니다. 은 +단순히 추가 정보를 보여줍니다.
Garret Wilson

20

먼저 다음 명령을 사용하여 데이터베이스와 연결

\c database_name

그리고 당신은이 메시지를 볼 수 있습니다- You are now connected to database database_name. 그리고 그들은 다음 명령을 실행합니다

SELECT * FROM table_name;

database_name 및 table_name에서 데이터베이스 및 테이블 이름으로 업데이트하십시오.


20
이것이 질문에 대한 대답인지 확실하지 않습니다. OP가 데이터베이스의 모든 테이블을 알고 있었지만 데이터베이스의 특정 테이블에서 모든 행을 가져 오는 것이 아니라고 생각합니다.
snuggles

16

PostgreSQL에서 pgAdmin4를 사용하는 경우이를 사용하여 데이터베이스의 테이블을 표시 할 수 있습니다.

select * from information_schema.tables where table_schema='public';

14

참고 \dt혼자 의지 목록 테이블 공공 데이터베이스의 스키마가 사용하고 있습니다. 테이블을 별도의 스키마로 유지하고 싶기 때문에 받아 들인 대답이 효과가 없었습니다.

특정 스키마 내의 모든 테이블을 나열하려면 다음을 수행 해야했습니다.

1) 원하는 데이터베이스에 연결하십시오.

psql mydb

2) 다음 \dt과 같이 명령 뒤에 표를 보려는 스키마 이름을 지정하십시오 .

\dt myschema.*

이것은 내가 관심있는 결과를 보여줍니다.

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres


8

\ dt (필수 * 없음)-이미 연결된 기존 데이터베이스의 모든 테이블을 나열합니다. 참고할 때도 유용합니다.

\ d [table_name]-형식 정보, 참조 및 키 제약 조건을 포함하여 주어진 테이블의 모든 열을 표시합니다.


6

을 사용하여 현재 데이터베이스의 테이블을 나열 할 수 있습니다 \dt.

Fwiw 는 MySQL \d tablename과 같은 주어진 테이블에 대한 세부 정보를 표시 show columns from tablename하지만 약간 더 많은 정보를 제공합니다.


5

psql 사용 : \ dt

또는:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

우선 다음과 같이 데이터베이스에 연결해야합니다.

내 데이터베이스는 우분투입니다

이 명령을 사용하여 연결

 \c ubuntu

이 메시지는

"이제"postgres "사용자로"ubuntu "데이터베이스에 연결되었습니다."

지금

이 명령을 실행하여 모든 테이블을 표시하십시오.

\d+

3

커맨드 라인에 모든 테이블을 나열하는 가장 간단한 방법은 내 취향입니다.

psql -a -U <user> -p <port> -h <server> -c "\dt"

주어진 데이터베이스의 경우 데이터베이스 이름을 추가하십시오.

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Linux와 Windows 모두에서 작동합니다.


3

빠른 oneliner로

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

또는 훨씬 명확한 json 출력 멀티 라이너를 선호하는 경우 :

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq

1

\ dt는 테이블을 나열하고 "\ pset pager off"는 별도의 테이블로 전환하지 않고 동일한 창에 표시합니다. dbshell에서 그 기능을 죽이는 것을 좋아하십시오.



0

먼저 연결할 데이터베이스를 입력하십시오.

\c database_name

그런 다음 현재 스키마의 모든 테이블을 보여줍니다.

\dt

-2

먼저 mac의 postgre.app 또는 postico를 사용하여 postgres 데이터베이스에 연결할 수 있습니다. 다음 명령을 실행하십시오.

psql -h localhost -p port_number -d database_name -U user_name -W

암호를 입력하면 데이터베이스에 액세스 할 수 있습니다

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