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

PostgreSQL 관리를 배우려고하고 있으며 psql 명령 줄 도구를 사용하는 방법을 배우기 시작했습니다.

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

, ddS+ 그러나 아무것도 나열되지 않습니다. pgAdmin III를 사용하여 두 개의 데이터베이스와 몇 개의 테이블을 만들었으므로 나열되어야한다는 것을 알고 있습니다.

코멘트

  • 액세스하려는 경우 명령 줄을 통해 psql -l
  • 를 실행합니다.

  • 이 주석은 확실히 최고의 답변 중 하나 여야합니다! 인증이 필요한 경우 psql --username=postgres -l를 사용할 수도 있습니다.

답변

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

  • \list 또는 \l : 모든 데이터베이스 나열
  • \dt : search_path
  • : search_path

다른 데이터베이스, 이러한 테이블에 관계없이 현재 데이터베이스의 모든 테이블을 나열합니다. 테이블 (및 기타 개체)을 보려면 올바른 데이터베이스에 연결해야합니다.

데이터베이스를 전환하려면 :

\connect database_name 또는 \c database_name

psql 에 대한 설명서를 참조하세요.

댓글

  • \c db_name를 사용하여 특정 데이터베이스에 연결할 수 있습니다.
  • \dt는 ‘ 현재 데이터베이스의 모든 테이블을 나열하지 않는 것으로 보입니다 (‘ search_path에없는 테이블을 제외하는 것 같습니다. 9.2 이상)
  • \dt *.는 검색 경로를 수정할 필요없이 모든 스키마의 모든 테이블을 나열합니다.
  • \ l +는 내가 가장 좋아하는 것은 디스크 사용량도 보여줍니다.
  • Windows에서는 psql -U username -l 명령으로 데이터베이스를 나열 할 수 있지만 슬래시 버전에서는 작동하지 않습니다.

답변

다음은 데이터베이스를 나열합니다.

SELECT datname FROM pg_database WHERE datistemplate = false; 

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

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

댓글

  • 사용자 ‘ 맞습니다. 그러나 질문은 psql-tool의 메타 명령에 관한 것이 었습니다. \ dt는 쿼리를 입력하는 것보다 훨씬 쉽습니다.
  • 때때로 저를 위해 멈춰있는 psql 인터프리터에 있어야하는 것과는 반대로 Linux 명령 줄에서 실행할 수 있기 때문에 이것이 훌륭한 대답이라고 생각합니다. ExtraPutty.
  • 또한 하루를 절약했습니다. 저의 특별한 경우에는 ‘ 사용자 정의 테이블 만 삭제하고 싶기 때문에 WHERE table_schema = 'public'를 추가합니다.
  • 시작하는 경우 -E 플래그와 함께 psql을 사용하면 메타 명령을 사용할 때 실제 쿼리가 표시됩니다.
  • 예, ‘ 그대로 좋은 대답입니다. 특히 큰 데이터베이스 목록에서 일부 스크립트를 생성하려는 경우보다 제어 된 방식으로 데이터베이스를 결합하고 쿼리 할 수 있습니다. 감사합니다.

답변

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도 동일한 작업을 수행합니다. 다음은 해당 데이터베이스의 테이블입니다.

댓글

  • \ d는 테이블 만 나열하지 않습니다. \d[S+] list tables, views, and sequences
  • ” 올바른 ” 답변입니다. ‘ 이미 기존 데이터베이스에 연결되어있을 필요가 없습니다.
  • 스크립트에서 사용하기위한 라이너 (루트) : su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

Answer

\l는 . \?를 사용하여 psql에 나열 할 수있는 몇 가지 슬래시 명령이 있습니다.

답변

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

\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) 

Answer

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

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

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

댓글

  • 이것은 사실이지만 다른 고객을 대상으로합니다. OP가 요청한 것보다.
  • 이것은 나를 위해 잘 작동했으며 내 사용 사례가 OP가 요청한 것과 정확히 같지는 않았지만 래퍼를 통해 연결된 동안 테이블 목록을 얻는 데 도움이되었습니다 ( Julialang에서 LibPQ.jl )

Answer

검색 경로에없는 스키마 또는 기본값 (예 : public)이므로 테이블은 \ dt를 사용하여 표시되지 않습니다. 데이터라는 스키마를 사용하는 경우 다음을 실행하여 수정할 수 있습니다.

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

psql을 종료했다가 다시 입력 한 다음 지금 \ dt는 스키마 데이터의 테이블도 표시합니다.

댓글

  • 음, 간단한 set search_path=data, public;도 트릭을 수행 할 것입니다. 🙂
  • @dezso, 변경 사항이 영구적으로 적용됩니까, 아니면 해당 psql 세션에서만 적용됩니까?
  • 어, 잘 모르겠습니다. 로그 아웃-로그인주기 대신에 의도 된 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다