Postgresql表的大小和完整的连接

时间:2014-04-23 08:29:55

标签: database postgresql join size

我正在使用的文件:

spark@cv-local:~$ ls -lh idUser.csv 
-rw-r--r-- 1 postgres postgres 9.5M Apr 22 14:55 idUser.csv

我之前的数据库大小:

spark@cv-local:/var$ sudo du -h | grep main  
5.8M   ./lib/postgresql/9.1/main/base/57371

Psql:

test2=# create table client_id (iditem INT);
CREATE TABLE
test2=# copy client_id from '/home/spark/idUser.csv' DELIMITER ',' CSV;
COPY 1158836

我的数据库的大小:

spark@cv-local:/var$ sudo du -h | grep main
46M   ./lib/postgresql/9.1/main/base/57371

有人可以解释为什么postgres的大小比正常文件大4倍吗?

我调查了那个因为我试图完全加入( CREATE TABLE testjoin AS SELECT * FROM client_id,item_id; )两个文件,其中一个是9.5M而另一个是5.8MI得到了一个错误磁盘空间。数据库大小通过屋顶:从70M到60G以上。

2 个答案:

答案 0 :(得分:0)

创建连接表时,请记住指定where子句。否则,您的表将包含来自client_id和item_id的所有可能的条目组合!

答案 1 :(得分:0)

  1. 在我的机器上,作为正常操作的一部分,PostgreSQL在pg_xlog下创建了16MB文件 - 这是事务日志。您只是创建数据库时此文件将为空。然而,在达到16MB后,它将保持这个大小。对你来说,这个文件本身就意味着意外增加的近50%。
  2. 正常情况下,数据库占用的磁盘空间略多于CSV等文本文件中的原始数据。数据库有一些开销,因为它必须维护内部结构和可能的索引。但是,如果您具有高度可压缩的大型文本列,PostgreSQL将自动压缩它们,这可能会使数据库大小小于原始数据。
  3. 如果执行VACUUM FULL,您的数据库应缩小。但是,只有当您有大量已删除的行时,此减少才会显着。请注意,通常不应VACUUM FULL,因为此操作仅以表锁定表。相反,您应该使用简单的VACUUM或仅依靠自动真空。
  4. 对于如此小的尺寸 - 在100MB以下,比较尺寸是不公平的。你应该只在达到几百兆字节后这样做。