如何将PostgreSQL数据添加或路由到新硬盘

时间:2017-02-10 09:59:47

标签: sql database postgresql

我正在使用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仪表,将数据发送到我的服务器。

我必须小心这台服务器,因为我的专家已经过去了。

2 个答案:

答案 0 :(得分:3)

您需要使用表空间。

  1. 创建表空间,例如CREATE TABLESPACE second_drive LOCATION 'D:/postgresdata/'(如果您获得了权限拒绝错误,请参阅this other answer
  2. ALTER TABLE table_bla_bla SET tablespace second_drive
  3. 表空间允许您决定哪些表位于哪些驱动器上,并且可以确保您控制读取和写入的位置,从而有助于提高性能,但它也有助于节省空间。

答案 1 :(得分:0)

Postgres将单个表放在TABLESPACE中(与单个磁盘相关),如果你有多个表就足够了,你可以通过将一些表移动到另一个磁盘来实现所需的目的。

另一方面,如果您有一个需要拆分多个磁盘的大型表,则需要使用Postgres的水平分区功能。

这建立在表空间的基础上,允许您创建一个主表table_bla_bla,它实际上只是两个或多个实际保存数据的表之上的外观。然后可以将这些数据表放在不同的表空间中,有效地将数据分割到磁盘上。

为此你会:

  1. 将您当前的table_bla_bla重命名为 table_bla_bla_c
  2. 创建新的table_bla_bla主表。
  3. 更改table_bla_bla_c以标记其继承自 table_bla_bla
  4. 创建一个继承自table_bla_bla_d的新table_bla_bla表,并将表空间指定为D驱动器。
  5. 根据partitioning documentation
  6. 应用分区触发器并检查约束

    一旦到位,您可以对其进行排列,以便table_bla_bla中的任何插入都会导致在D驱动器上创建新记录。 table_bla_bla上的选择将从两个磁盘读取。