답변:
로부터 psql
명령 줄 인터페이스,
먼저 데이터베이스를 선택하십시오
\c database_name
그런 다음 현재 스키마의 모든 테이블을 보여줍니다.
\dt
프로그래밍 방식으로 (또는 psql
인터페이스에서도)
SELECT * FROM pg_catalog.pg_tables;
시스템 테이블은 pg_catalog
데이터베이스에 있습니다.
\l
과 동일 show databases
합니다. dt
≃ show tables
및 l
≃show databases
\dt
매우 유용합니다. 즉, pg_catalog.pg_tables
당신이에 연결하는 일이 어떤 데이터베이스 사용자가 생성 한 사람과 함께 내부 테이블 덩어리에 나타나는 일이 훨씬 덜합니다.
psql my_db_name
\dt
작동 하려면 실행해야합니다 . 내가 달릴 때 psql
데이터베이스 이름없이, 나는 메시지 "아니 관계를 찾을 수"있어
SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
\c <DATABASE_NAME>
데이터베이스를 선택해야합니다.
수퍼 유저로 로그인 :
sudo -u postgres psql
모든 데이터베이스와 사용자를 \l
명령 별로 나열 할 수 있습니다 (다른 명령을로 나열 \?
).
이제 당신은 당신이에 의해 사용자 / 데이터베이스를 변경할 수있는 다른 데이터베이스를보고 싶다면 \c
같은 명령 \c template1
, \c postgres postgres
사용 \d
, \dt
또는 \dS
/ 등 테이블 / 뷰를 볼 수 있습니다.
(완전성을 위해)
(SQL 표준) 정보 스키마를 쿼리 할 수도 있습니다 .
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
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에서 다음과 같은 명령을 실행할 수 있습니다.
\?
모든 명령을 나열\l
데이터베이스 목록\conninfo
현재 연결에 대한 정보를 표시합니다\c [DBNAME]
예를 들어, 새로운 데이터베이스에 연결 \c template1
\dt
공개 스키마의 테이블 목록\dt <schema-name>.*
특정 스키마의 테이블 목록 (예 : \dt public.*
\dt *.*
모든 스키마의 테이블 목록SELECT * FROM my_table;
( 예 : 명령문은 세미콜론으로 끝나야합니다 ;
)\q
psql을 종료-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;
**************************
모든 데이터베이스 및 스키마를 확인할 수 있도록 수퍼 유저로 로그인하십시오.
sudo su - postgres
그런 다음 다음 명령을 사용하여 postgresql 셸을 얻을 수 있습니다.
psql
이제 다음 명령을 사용하여 모든 데이터베이스 목록을 확인할 수 있습니다.
\l
데이터베이스의 크기를 확인하려면 다음을 사용하십시오.
\l+
q
돌아가려면을 누르십시오 .
데이터베이스를 찾았 으면 다음 명령을 사용하여 해당 데이터베이스에 연결할 수 있습니다.
\c database_name
연결되면 다음을 통해 데이터베이스 테이블 또는 스키마를 확인할 수 있습니다.
\d
이제 쉘로 돌아가려면 다음을 사용하십시오.
q
이제 특정 테이블 사용에 대한 세부 정보를 더 보려면 :-
\d table_name
postgresql_shell로 돌아가려면을 누르십시오 \q
.
터미널로 돌아가려면을 누르십시오 exit
.
테이블 만 사용하십시오
=> \dt
스키마 테이블을 보려면
=>\dt+
특정 스키마 테이블을 보려면
=>\dt schema_name.*
+
와 혼동 하고 있다고 확신합니다 S
. 후자 (문자)는 스키마 테이블을 보여줍니다. 은 +
단순히 추가 정보를 보여줍니다.
먼저 다음 명령을 사용하여 데이터베이스와 연결
\c database_name
그리고 당신은이 메시지를 볼 수 있습니다- You are now connected to database database_name
. 그리고 그들은 다음 명령을 실행합니다
SELECT * FROM table_name;
database_name 및 table_name에서 데이터베이스 및 테이블 이름으로 업데이트하십시오.
PostgreSQL에서 pgAdmin4를 사용하는 경우이를 사용하여 데이터베이스의 테이블을 표시 할 수 있습니다.
select * from information_schema.tables where table_schema='public';
참고 \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
select
*
from
pg_catalog.pg_tables
where
schemaname != 'information_schema'
and schemaname != 'pg_catalog';
\ dt (필수 * 없음)-이미 연결된 기존 데이터베이스의 모든 테이블을 나열합니다. 참고할 때도 유용합니다.
\ d [table_name]-형식 정보, 참조 및 키 제약 조건을 포함하여 주어진 테이블의 모든 열을 표시합니다.
빠른 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