升级指南
Supabase 以快速交付著称,我们致力于尽可能将新功能添加到现有项目中。在某些情况下,使用新功能可能需要升级或迁移您的 Supabase 项目。
本指南涉及升级 Supabase 项目的 Postgres 版本。如需扩展计算规模,请参阅计算与磁盘页面。
您可以通过原地升级或暂停后恢复项目的方式来完成升级。
原地升级
出于安全考虑,自定义角色的密码不会被备份,在恢复后需要重新设置。详情请参阅此处
原地升级使用 pg_upgrade
工具。对于超过 1GB 的项目,此方法通常比暂停-恢复周期更快,且随着数据库规模增大,速度优势更加明显。
此外,如果升级失败,您的原始数据库将被重新上线并能够继续处理请求。
根据经验法则,pg_upgrade 的处理速度约为每秒 100MB(在执行数据升级时)。您可以根据数据库大小使用此指标来估算升级所需的停机时间窗口。在此窗口期间,您应规划数据库及相关服务不可用的情况。
暂停与恢复项目
我们推荐使用原地升级(in-place upgrade)方式,因为这种方式更快、更可靠。此外,只有免费层(Free-tier)项目才可以使用暂停与恢复升级方法。
当您暂停并恢复项目时,恢复后的数据库将包含最新功能。这种方法确实会导致服务中断,请注意您的项目将有短暂时间不可访问。
- 在控制面板的常规设置页面,点击暂停项目。项目暂停过程中您将被重定向至首页,此过程可能需要几分钟。
- 项目暂停后,点击恢复项目。恢复时间取决于数据库中的数据量,可能需要几分钟。恢复完成后您将收到邮件通知。
请注意,暂停+恢复升级方式会先销毁项目资源再重新创建。如果恢复过程失败,需要Supabase技术支持人员手动干预才能使项目重新上线。
注意事项
无论采用哪种升级方式,都存在以下注意事项:
逻辑复制
如果您使用了逻辑复制(logical replication),升级过程不会保留复制槽(replication slots)。升级后您需要使用pg_create_logical_replication_slot
方法手动重新创建。有关该方法的详细信息,请参阅Postgres文档中的复制管理函数。
重大变更
服务的新版本可能会破坏现有功能或改变您所依赖的性能特征。如果您的项目符合升级条件,您可以在 Supabase 仪表盘 中查看当前使用的服务版本。
重大变更通常只出现在 Postgres 和 PostgREST 的主版本升级中。您可以在以下位置查阅它们各自的发布说明:
如果您是从较旧的版本升级,还需要考虑所有中间版本的发布说明。
时间限制
自2024年06月24日起,当项目被暂停后,用户有90天的时间窗口可以通过Supabase Studio在平台上恢复该项目。
这90天的窗口期允许Supabase引入可能与旧备份不兼容的平台变更。与活跃项目不同,静态备份无法更新以适应这些变更。
在90天的恢复窗口期内,可以通过Studio控制面板一键恢复被暂停的项目。
90天恢复窗口期结束后,您可以从项目控制面板下载项目备份文件和存储对象。关于如何本地加载该备份以恢复数据,请参阅本地恢复下载的备份。
如果在项目暂停期间升级到付费计划,任何已过期的一键恢复选项将重新启用。由于备份是在向后兼容窗口期外创建的,恢复可能会失败。如果在升级后恢复备份时遇到问题,请联系技术支持。
磁盘大小调整
升级时,Supabase平台会根据数据库当前大小"智能调整"磁盘容量。例如,如果您的数据库大小为100GB,而您拥有200GB的磁盘,升级操作会将磁盘容量缩减至120GB(数据库大小的1.2倍)。
依赖于Postgres扩展的对象
原地升级不支持升级包含引用系统OID的reg*数据类型的数据库。如果您创建了以下扩展依赖的任何对象,升级后需要重新创建它们。
pg_cron
记录
pg_cron不会自动清理历史记录。如果不定期修剪这些记录,可能会导致cron.job_run_details
表变得极其庞大;在升级前您应该清理该表中不必要的记录。
在就地升级过程中,pg_cron
扩展会被删除并重新创建。在此过程之前,cron.job_run_details
表会被复制以避免丢失历史日志。复制一个极其庞大的详情表会立即产生磁盘压力,轻则导致不必要的性能下降,重则可能导致升级过程失败。
扩展
当前原地升级不支持升级使用低于以下版本的扩展的数据库:
- TimescaleDB 2.16.1
- plv8 3.1.10
要升级到新版本的Postgres,您需要在升级前删除这些扩展,并在升级后重新创建它们。
认证方法变更 - 弃用 md5 改用 scram-sha-256
md5 哈希方法存在已知弱点,使其不适合用于加密场景。因此,我们将弃用 md5 并改用 scram-sha-256,这是最新版 PostgreSQL 默认且最安全的认证方法。
在升级过程中,我们会自动将 Supabase 托管角色的密码迁移至 scram-sha-256,但您需要手动迁移所有自定义角色的密码,否则升级后将无法使用这些角色进行连接。
要识别使用 md5 哈希方法的角色并迁移其密码,您可以在升级后执行以下 SQL 语句:
123456789-- 列出使用 md5 哈希方法的角色SELECT rolnameFROM pg_authidWHERE rolcanlogin = true AND rolpassword LIKE 'md5%';-- 将角色密码迁移至 scram-sha-256ALTER ROLE <role_name> WITH PASSWORD '<password>';
数据库容量缩减
作为升级流程的一部分,系统会执行真空清理等维护操作,这可能导致报告的数据库容量减少。
升级后验证
Supabase 会执行全面的升级前和升级后验证,确保数据库正确升级。但您仍应规划应用层面的验证,因为可能存在未预期的变更,在规划停机窗口时应为此预留时间。
具体升级说明
升级至 Postgres 17
在使用 Postgres 17 的项目中,以下扩展已被弃用:
plcoffee
plls
plv8
timescaledb
低版本 Postgres 上的现有项目不受影响,这些扩展将继续在 Postgres 15 项目上获得支持,直到 Postgres 15 在 Supabase 平台终止支持。
计划从 Postgres 15 升级至 Postgres 17 的项目需要通过在 Supabase 仪表盘中禁用这些扩展来移除它们。