首页 > 解决方案 > 使用 Postgres 多个模式有多安全?

问题描述

Heroku 警告在 Postgres 中使用 Multiple Schemas。但没有具体说明numerous operational problems造成的。

正如 Heroku 文档上所发布的:

在数据库中使用多个模式的最常见用例是构建软件即服务应用程序,其中每个客户都有自己的模式。虽然这种技术看起来很有吸引力,但我们强烈建议不要使用它,因为它会导致许多操作问题的案例。例如,即使是中等数量的模式(> 50)也会严重影响 Heroku 的数据库快照工具 PG Backups 的性能。

我认为,备份的问题可以通过添加一个follower db来解决。

60每个模式都有表,所以使用1000模式我会有60,000表。这将如何影响数据库性能?扩展时我会遇到什么样的问题?

标签: postgresqlherokudatabase-administration

解决方案


运行大量模式和/或表的第一个问题通常不会干扰正在运行的数据库。操作员遇到的主要问题是他们将无法创建数据库的逻辑备份。运行heroku pg:backups可能会像pg_dump手动运行一样失败。通常,这是您将在尝试的备份日志中看到的错误:

ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction

所需的大量锁最终导致数据库出现 OOM 条件。这在 Heroku 上并不总是一个问题。如果您使用的是生产数据库,则可以依靠他们的时间点恢复选项作为您的 DR 解决方案。话虽如此,如果您无法运行逻辑备份,则从 Heroku 导出数据将很困难,因为它们目前不支持外部复制。它不太理想,但假设您可以尝试按模式转储数据库模式以避免 OOM 条件。


推荐阅读