根据PostgreSQL的Simple Configuration Recommendations,建议最灵活和可管理的环境的建议最佳做法是创建一个特定于应用程序的表空间,该表空间在/ pgdata- app_tblspc 上有自己的挂载点, "对于每个模式,应至少有两个表空间。一个用于表,一个用于索引"
我能够创建这些挂载点和表空间,但想知道如何将模式分配给特定的表空间。据我所知,表空间通过CREATE DATABASE ... TABLESPACE ...命令与数据库挂钩,但CREATE SCHEMA命令中没有TABLESPACE指令。
遵循简单配置建议文档的逻辑,似乎隐含的建议是为每个应用程序创建一个数据库,每个数据库映射到两个表空间:一个用于数据,另一个用于索引。
但是,同一文档继续说应用程序特定数据库不是维护应用程序之间数据分离的首选方法。拥有一个具有多个模式的数据库是可行的方法。
我在这里缺少什么?感谢任何指针。
答案 0 :(得分:3)
为什么CREATE SCHEMA
没有表空间子句?
模式提供逻辑数据分离,而表空间提供物理分离。只有包含数据的对象(如表和索引)在其CREATE
语句中具有表空间子句。架构没有关联的数据文件。
如果希望生活在不同模式中的表驻留在不同的表空间中,则必须在每个CREATE TABLE
和CREATE INDEX
语句中添加表空间子句。
您是否应该为每个应用程序使用两个表空间,一个用于表,一个用于索引?
我想说这取决于您的性能要求和数据量。
如果您正在处理数TB的数据仓库,并且希望通过在不同的存储系统上分发数据来优化性能,那么使用表空间将是一个有趣的选择。
对于一个小型数据库,我说这不值得这么麻烦,如果你购买足够的RAM以适应内存中的数据库,那么你会更好。
不同的数据库或不同的模式是不同的应用程序分离数据的更好方法吗?
如果应用程序需要访问彼此的数据,请将它们放在一个数据库中的不同模式中。否则,请使用两个数据库,以确保它们不会混淆彼此的数据。
总的来说,如果要限制表的增长或者表空间位于不同的存储系统上以进行负载分配,表空间就很好。