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()関数をカットできます。


時にはデータベースにもインデックスが含まれています。ある程度の保管価値があります。完全なデータベースのサイズを提供する1つのコマンドを探しています。
美しい心

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
その答えはマイクの答えとどう違うのですか?
a_horse_with_no_name 2013

3
将来の私や他の人がここに着陸したら、私はあなたを悩ませるでしょう:これは短く、名前付きデータベース/テーブルの場合、Mikeはサーバー上のすべてのデータベース用で、後者は元の質問によりよく答えます。
James Brown、

78

回答に基づいて、ここによる@Hendy Irawan

データベースのサイズを表示:

\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
この関数の順序は間違っています。人間が読める形式の違いはわかりません。たとえば、サイズが7151 KBのデータベースは、サイズが7 GBのデータベースより前になります。
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;
マイケル

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 wikiから。


注:ユーザーが接続できないデータベースは、サイズが無限であるかのようにソートされます。

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タブを選択すると、すべてのデータベースとそのサイズ(3列目)の概要が表示されます。
zloster 2016

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

2
あなたはこのの出力がどのように見えるか、データベースがそのデータを格納している場合、このなりますが、再仮定、などの詳細コンテキストを追加したい場合があります
fzzfzzfzz

3
これは正しい答えかもしれませんが、いくつかの説明を含めることをお勧めします。
18年

CentOSの上の正しいコマンドは次のいずれかです。 du -k /var/lib/pgsql/ | sort -n | tail
Feriman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.