2016-12-02 59 views
2

根据Simple Configuration Recommendations PostgreSQL的设立最灵活和可管理的环境中推荐的最佳做法是创建一个拥有自己的挂载点在专用的表空间/ pgdata- app_tblspc和“每schema至少应该有两个表空间,一个用于表,另一个用于索引“创建的Postgres模式

我能够创建这些挂载点和表空间,但想知道如何将模式分配给特定的表空间。据我所知,表空间是通过CREATE DATABASE ... ... TABLESPACE命令挂数据库,但在CREATE SCHEMA命令中没有TABLESPACE指令。

继简单配置建议文档的逻辑,似乎隐含的建议是创建每个应用程序一个数据库,映射到两个表空间每个数据库:一个用于数据,另一个用于索引。

然而,相同的文件接着说该应用程序特定的数据库是不维持应用之间的数据分离的优选方式。拥有一个拥有多个模式的数据库是最好的选择。

我在这里错过了什么?欣赏任何指针。

回答

2
  • 为什么CREATE SCHEMA没有表空间子句?

    Schemas提供了一个逻辑数据的分离,而表空间提供了物理分离。只有持有数据的对象(如表和索引)在其CREATE语句中有一个表空间子句。架构没有关联的数据文件。

    如果您希望处于不同架构中的表位于不同的表空间中,则必须为每个CREATE TABLECREATE INDEX语句添加一个表空间子句。

  • 你应该使用每个应用程序拖表空间,一个表和一个索引?

    我要说的是,这取决于你的性能要求和数据量。

    如果您正在处理多TB数据仓库,并且希望通过将数据分布到不同存储系统来优化性能,那么使用表空间将是一个有趣的选项。

    对于一个小规模的数据库,我会说这不值得麻烦,如果你购买了足够的RAM来适应内存中的数据库,那么你会更好。

  • 不同的数据库或不同的架构是不同应用程序分离数据的更好方法吗?

    如果应用程序需要访问彼此的数据,把它们在不同的模式中的一个数据库。否则,使用两个数据库来确保它们不会混淆对方的数据。

总体而言,如果要限制表的增长或表空间位于不同存储系统上进行负载分配,则表空间是很好的。