Postgresql 为什么我的空postgres数据库是7MB?

Postgresql 为什么我的空postgres数据库是7MB?,postgresql,Postgresql,我刚刚创建了一个新的数据库,它已经占用了7MB。你知道是什么占据了这么多空间吗?有没有办法获得数据库的“真实”大小,如存储了多少数据 0f41ba72-a1ea-4516-a9f0-de8a3609bc4a=> select pg_size_pretty(pg_database_size(current_database())); pg_size_pretty ---------------- 7055 kB (1 row) 0f41ba72-a1ea-4516-a9f0-de8a

我刚刚创建了一个新的数据库,它已经占用了7MB。你知道是什么占据了这么多空间吗?有没有办法获得数据库的“真实”大小,如存储了多少数据

0f41ba72-a1ea-4516-a9f0-de8a3609bc4a=> select pg_size_pretty(pg_database_size(current_database()));
 pg_size_pretty 
----------------
 7055 kB
(1 row)

0f41ba72-a1ea-4516-a9f0-de8a3609bc4a=> \dt
No relations found.

好吧,即使你没有创建任何关系,新数据库也不是空的。发布
创建数据库
时,Postgres会将
模板
数据库(随目录表一起)复制到新数据库。事实上,“没有创造,一切都在改变”。您可以使用以下命令检查此项:

--Size per table
SELECT pg_size_pretty(pg_total_relation_size(oid)), relname FROM pg_class WHERE relkind = 'r' AND NOT relisshared;

--Total size
SELECT pg_size_pretty(sum(pg_total_relation_size(oid))) FROM pg_class WHERE relkind = 'r' AND NOT relisshared;

--Total size of databases
SELECT pg_size_pretty(pg_database_size(oid)), datname FROM pg_database;
引自:

默认情况下,将通过克隆标准创建新数据库 系统数据库模板1

空数据库包含和

执行此查询以查看它们:

select nspname as schema, relname as table, pg_total_relation_size(c.oid)
from pg_class c
join pg_namespace n on n.oid = relnamespace
order by 3 desc;

       schema       |            table            | pg_total_relation_size 
--------------------+-----------------------------+------------------------
 pg_catalog         | pg_depend                   |                1146880
 pg_catalog         | pg_proc                     |                 950272
 pg_catalog         | pg_rewrite                  |                 589824
 pg_catalog         | pg_attribute                |                 581632
... etc
您可以通过查询获得非系统关系的总大小:

select sum(pg_total_relation_size(c.oid))
from pg_class c
join pg_namespace n on n.oid = relnamespace
where nspname not in ('information_schema', 'pg_catalog', 'pg_toast');

查询返回空数据库的
null

每个PostgreSQL数据库都有自己的系统目录。。7MB。所以你的数字是正确的。PostgreSQL是为客户机-服务器体系结构和1GB及更长的数据库而设计的,因此成本并不高

如果需要减少空间分配,可以尝试使用SQLite或Firebird等嵌入式数据库