PHP는 모든 테이블을 나열


125

모든 테이블을 나열하고 싶습니다 liferayPostgreSQL 설치시 데이터베이스의 . 어떻게합니까?

데이터베이스 SELECT * FROM applications;에서 실행 하고 싶습니다 liferay.applications내 liferay db의 테이블입니다. 이것은 어떻게 이루어 집니까?

모든 데이터베이스 목록은 다음과 같습니다.

postgres=# \list
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
 -----------+----------+----------+-------------+-------------+-----------------------
 liferay   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | liferay=CTc/postgres
 lportal   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# 

답변:


203

모든 테이블 을 나열 하려면 다음을 사용해야합니다.

\dt *.*

모든 스키마의 모든 테이블을 원한다는 것을 나타냅니다 . 여기에는의 테이블 pg_catalog, 시스템 테이블 및의 테이블이 포함 됩니다 information_schema. "모든 사용자 정의 스키마의 모든 테이블"을 말하는 내장 된 방법은 없습니다. 그러나 search_path실행하기 전에 원하는 모든 스키마 목록으로 설정할 수 있습니다\dt .

프로그래밍 방식으로이 작업을 수행 할 수도 있는데,이 경우 psql백 슬래시 명령이 작업을 수행하지 않습니다. 곳이다 (가)INFORMATION_SCHEMA 구조로되어 있습니다. 테이블을 나열하려면

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

BTW, psql백 슬래시 명령에 대한 응답으로 수행중인 작업 을 보려면 플래그로 실행 psql하십시오 -E. 예 :

$ psql -E regress    
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
       pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
       d.datcollate as "Collate",
       d.datctype as "Ctype",
       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************

데이터베이스 목록을 가져올 때 psql검색 중임을 알 수 있습니다 pg_catalog.pg_database. 마찬가지로, 주어진 데이터베이스 내의 테이블의 경우 :

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' WHEN 'f' THEN 'foreign table' 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;

INFORMATION_SCHEMA가능한 경우 Pg 시스템 카탈로그 대신 이식 가능한 SQL 표준을 사용하는 것이 바람직 하지만 때로는 Pg 관련 정보가 필요합니다. 이 경우 시스템 카탈로그를 직접 쿼리하는 것이 좋으며 psql -E이를 수행하는 방법에 대한 유용한 안내서가 될 수 있습니다.


information_schema.tables어떤 이유로 든 조회수를 포함합니다. (어쨌든 PostgreSQL 9.2에서)
jpmc26

@ jpmc26 네, table_type = 'VIEW'이므로 제외하기 쉽습니다. 일반적으로 SQL은 뷰를 가능한 한 테이블과 동일하게 처리하려고합니다.
Craig Ringer

94

데이터베이스에 연결 한 후 테이블을 나열하십시오.

\c liferay
\dt

어쨌든 내가 그렇게하는 방법입니다.

원하는 경우이 두 명령을 한 줄로 결합 할 수 있습니다.

\c liferay \dt

2
\dt *.*관심있는 모든 테이블이에 있지 않은 경우 실제로 원합니다 search_path.
Craig Ringer

10

당신이 할 수있는 공개 테이블을 보려면

목록 테이블

\dt

테이블,보기 및 액세스 권한 목록

\dp or \z

또는 테이블 이름 만

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

2

SQL 쿼리에서 다음 코드를 작성할 수 있습니다.

select table_name from information_schema.tables where table_schema='YOUR_TABLE_SCHEME';

테이블 구성표를 YOUR_TABLE_SCHEME로 바꾸십시오.

예:

select table_name from information_schema.tables where table_schema='eLearningProject';

모든 체계와 모든 테이블을 보려면 where 절이 필요하지 않습니다.

select table_name from information_schema.tables

1

한 줄 예는

\dt schemaname.* 

당신의 상원에서

\dt public.*

0

모든 스키마에 모든 테이블이 필요하지 않은 경우 자동화 스크립트에서 사용할 수 있습니다.

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done

-3

\?psql에서 지원되는 모든 명령에 대한 정보를 얻기 위해 입력 할 수 있습니다 .

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