Postgres DB 크기 명령


324

Postgres에서 모든 데이터베이스 크기를 찾는 명령이 있습니까?

다음 명령을 사용하여 특정 데이터베이스의 크기를 찾을 수 있습니다.

select pg_database_size('databaseName');

1
그래도 단위는 무엇입니까? 바이트입니까?
Abel Callejo

바이트입니다. :-)
john16384

답변:


365

그리고 ... 전체 쿼리를 입력하지 않으려는 경우 ... 입력 할 수도 있습니다.

\l+ <database_name>

데이터베이스 크기를 포함하여 데이터베이스에 대한 세부 정보를 얻을 수 있습니다.

그리고 ... 모든 데이터베이스의 크기를 가져옵니다.

입력 만하면됩니다 ...

\l+

이러한 postgresql 도우미 명령으로 쿼리하려면 postgresql 명령 프롬프트로 이동해야 할 수도 있습니다.

다음을 입력하여 다른 postgresql 도우미 명령을 확인하십시오.

\?

postgresql 명령 프롬프트에서.


193

"pg_datbase"시스템 테이블에서 연결할 수있는 모든 데이터베이스의 이름을 얻을 수 있습니다. 아래와 같이 이름에 기능을 적용하십시오.

select t1.datname AS db_name,  
       pg_size_pretty(pg_database_size(t1.datname)) as db_size
from pg_database t1
order by pg_database_size(t1.datname) desc;

사람 대신 기계가 출력을 사용하도록하려면 pg_size_pretty () 함수를자를 수 있습니다.


때로는 데이터베이스에도 색인이 포함되어 있습니다. 스토리지 값이 있습니다. 완전한 데이터베이스의 크기를 제공하는 하나의 명령을 찾고 있습니다.
아름다운 마음

11
@ user2151087 : 인덱스의 크기를 pg_database_size() 포함 합니다
a_horse_with_no_name

궁금한 사람이있는 경우이 쿼리는와 정확히 동일한 값을 제공합니다 \l+. 그러나 출력 형식은 읽기 쉽습니다 (열이 적음). 쓰기 가능성과 가독성 간의 타협…
Skippy le Grand Gourou

158
-- Database Size
SELECT pg_size_pretty(pg_database_size('Database Name'));
-- Table Size
SELECT pg_size_pretty(pg_relation_size('table_name'));

5
그 대답은 Mike와 어떻게 다릅니 까?
a_horse_with_no_name

3
미래의 저와 다른 사람들이 여기에 도착하면 문제를 덜어 줄 것입니다. 이것은 짧고 이름이 지정된 데이터베이스 / 테이블에서 Mike 는 서버의 모든 데이터베이스에 대해 후자가 원래의 질문에 더 잘 대답합니다.
제임스 브라운

78

대답을 바탕으로 여기 에 의해 @Hendy 이르 완

데이터베이스 크기 표시 :

\l+

예 :

=> \l+
 berbatik_prd_commerce    | berbatik_prd     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 19 MB   | pg_default | 
 berbatik_stg_commerce    | berbatik_stg     | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 8633 kB | pg_default | 
 bursasajadah_prd         | bursasajadah_prd | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1122 MB | pg_default | 

테이블 크기 표시 :

\d+

예 :

=> \d+
 public | tuneeca_prd | table | tomcat | 8192 bytes | 
 public | tuneeca_stg | table | tomcat | 1464 kB    | 

에서 작동합니다 psql.


1
나를 위해, 단지 \d+ *일했다, 평범한 \d+반환Did not find any relations.
Phil pirozhkov

1
@philpirozhkov 먼저 데이터베이스에 연결 \c dbname한 다음 ( ) 수행하십시오 \d+.
chappjc

숫자 1 또는 소문자 L입니까?
dman

28

예, Postgres에서 데이터베이스 크기를 찾는 명령이 있습니다. 다음과 같습니다.

SELECT pg_database.datname as "database_name", pg_size_pretty(pg_database_size(pg_database.datname)) AS size_in_mb FROM pg_database ORDER by size_in_mb DESC;

3
이 기능에서 순서가 잘못되었습니다. 사람이 읽을 수있는 형식의 차이점을 알 수 없습니다. 예를 들어, 7151KB 크기의 데이터베이스는 7GB 크기의 데이터베이스보다 우선합니다.
onnimonni

고정 :SELECT database_name, pg_size_pretty(size) from (SELECT pg_database.datname as "database_name", pg_database_size(pg_database.datname) AS size FROM pg_database ORDER by size DESC) as ordered;
Michael

1
정렬에만 "원시"크기가 필요하다고 생각합니다. 하위 쿼리 대신 이것을 사용했습니다 SELECT pg_database.datname AS "DB Name", pg_size_pretty(pg_database_size(pg_database.datname)) AS "Size" FROM pg_database ORDER BY (pg_database_size(pg_database.datname)) DESC;.
M-Dahab

20
SELECT pg_size_pretty(pg_database_size('name of database'));

특정 데이터베이스의 전체 크기를 제공하지만 서버 내에서 모든 데이터베이스를 수행 할 수는 없다고 생각합니다.

그러나 당신은 이것을 할 수 있습니다 ...

DO
$$
DECLARE
r   RECORD;
db_size TEXT;
BEGIN
FOR r in
SELECT datname FROM pg_database
WHERE datistemplate = false
LOOP
db_size:= (SELECT pg_size_pretty(pg_database_size(r.datname)));

RAISE NOTICE 'Database:% , Size:%', r.datname , db_size;

END LOOP;
END;
$$

왜이 pg_database끔찍한 pl / pgsql 대신 단일 쿼리가 될 수 없습니까?
MozenRath

12

로부터 PostgreSQL의 위키 .


참고 : 사용자가 연결할 수없는 데이터베이스는 마치 크기가 무한한 것처럼 정렬됩니다.

SELECT d.datname AS Name,  pg_catalog.pg_get_userbyid(d.datdba) AS Owner,
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname))
        ELSE 'No Access'
    END AS Size
FROM pg_catalog.pg_database d
    ORDER BY
    CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(d.datname)
        ELSE NULL
    END DESC -- nulls first
    LIMIT 20

이 페이지에는 가장 큰 관계의 크기와 가장 큰 테이블을 찾는 스 니펫도 있습니다.


4

아래 쿼리를 사용하여 PostgreSQL의 모든 데이터베이스 크기를 찾을 수 있습니다.

이 블로그에서 참조합니다.

SELECT 
    datname AS DatabaseName
    ,pg_catalog.pg_get_userbyid(datdba) AS OwnerName
    ,CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname))
        ELSE 'No Access For You'
    END AS DatabaseSize
FROM pg_catalog.pg_database
ORDER BY 
    CASE 
        WHEN pg_catalog.has_database_privilege(datname, 'CONNECT')
        THEN pg_catalog.pg_database_size(datname)
        ELSE NULL
    END DESC;

3

pgAdmin을 시작하고 서버에 연결 한 후 데이터베이스 이름을 클릭하고 통계 탭을 선택하십시오. 목록 맨 아래에 데이터베이스 크기가 표시됩니다.

그런 다음 다른 데이터베이스를 클릭하면 통계 탭에 남아 있으므로 많은 노력 없이도 많은 데이터베이스 크기를 쉽게 볼 수 있습니다. 테이블 목록을 열면 모든 테이블과 크기가 표시됩니다.


1
그리고 Databases트리 노드 (DB 연결에 연결된)를 클릭하고 Statistics탭을 선택하면 모든 데이터베이스와 크기 (세 번째 열)에 대한 요약이 표시됩니다.
zloster

2
du -k /var/lib/postgresql/ |sort -n |tail

2
데이터베이스가 데이터를 저장하는 위치, 출력 결과 등을 가정하는 가정에 대한 자세한 내용을 추가 할 수 있습니다.
fzzfzzfzz

3
이것이 정답 일 수도 있지만 몇 가지 설명을 포함하는 것이 가장 좋습니다.
스나이퍼

CentOS의 올바른 명령은 다음과 같습니다. du -k /var/lib/pgsql/ | sort -n | tail
Feriman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.