我正在使用Windows Server 2008 R2标准
运行PostgreSQL 9.0.1,由Visual C ++ build 1500,32位
编译我得到了C:/和D:/ Drive
C:/ - > 6.7GB可用空间(几乎已满,我的服务器性能低下)
D:/ - > 141GB可用空间
目前我的PostgreSQL数据存储在C:/现在,我想路由或添加路径到D:/而不将数据从C:/迁移到D:/,因为现在我的PostgreSQL数据存储在148 GB左右。它沉重而庞大。
如果成功,我仍然可以执行SELECT * From table_bla_bla
之类的查询,它会返回两个驱动器的结果吗?
请不要建议我将PostgreSQL更改为其他数据库或任何其他数据库。 因为我正在运行39,763设备GPS仪表,将数据发送到我的服务器。
我必须小心这台服务器,因为我的专家已经过去了。
答案 0 :(得分:3)
您需要使用表空间。
CREATE TABLESPACE second_drive LOCATION 'D:/postgresdata/'
(如果您获得了权限拒绝错误,请参阅this other answer)ALTER TABLE table_bla_bla SET tablespace second_drive
表空间允许您决定哪些表位于哪些驱动器上,并且可以确保您控制读取和写入的位置,从而有助于提高性能,但它也有助于节省空间。
答案 1 :(得分:0)
Postgres将单个表放在TABLESPACE中(与单个磁盘相关),如果你有多个表就足够了,你可以通过将一些表移动到另一个磁盘来实现所需的目的。
另一方面,如果您有一个需要拆分多个磁盘的大型表,则需要使用Postgres的水平分区功能。
这建立在表空间的基础上,允许您创建一个主表table_bla_bla
,它实际上只是两个或多个实际保存数据的表之上的外观。然后可以将这些数据表放在不同的表空间中,有效地将数据分割到磁盘上。
为此你会:
table_bla_bla
重命名为
table_bla_bla_c
table_bla_bla
主表。table_bla_bla_c
以标记其继承自
table_bla_bla
table_bla_bla_d
的新table_bla_bla
表,并将表空间指定为D驱动器。一旦到位,您可以对其进行排列,以便table_bla_bla
中的任何插入都会导致在D驱动器上创建新记录。 table_bla_bla
上的选择将从两个磁盘读取。