PostgreSQL 관리를 배우려고하고 있으며 psql
명령 줄 도구를 사용하는 방법을 배우기 시작했습니다.
psql --username=postgres
로 로그인 할 때 모든 데이터베이스와 테이블을 어떻게 나열합니까?
, d
및 dS+
그러나 아무것도 나열되지 않습니다. pgAdmin III를 사용하여 두 개의 데이터베이스와 몇 개의 테이블을 만들었으므로 나열되어야한다는 것을 알고 있습니다.
코멘트
답변
다음 명령을 참고하십시오.
-
\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 세션에서만 적용됩니까?
- 어, 잘 모르겠습니다. 로그 아웃-로그인주기 대신에 의도 된 것입니다.
psql -l
를 실행합니다.
psql --username=postgres -l
를 사용할 수도 있습니다.