Realtime Database Changes 适用于任何启用了逻辑复制并安装了 wal2json 扩展的 Postgres 数据库。

以下步骤将确保您的数据库已正确设置为使用 Realtime。

wal2json 扩展

Realtime 依靠 wal2json Postgres 扩展将数据库更改格式化为 JSON,然后将其发送给 Realtime 订阅者。

由 AWS RDS 和 Google Cloud SQL 管理的 Postgres 数据库应已安装 wal2json。 请检查以确保您的 Postgres 数据库确实如此。

逻辑复制配置

Realtime 依靠 Postgres 的逻辑复制功能来获取数据库更改。请在数据库上启用逻辑复制并配置以下设置:

  • max_replication_slots: 我们建议使用 10 个,因为 Realtime 需要几个插槽以及满足非实时逻辑复制需求所需的插槽。
  • max_slot_wal_keep_size: 我们建议使用 1024 (MB),以便 Realtime 可以尝试提供存储在 Postgres 中的更多数据库更改。

请参阅计算加载项,了解根据我们用于自己的云产品/服务的值在不同实例大小下的建议max_replication_slots。

实时数据库设置

supabase_realtime 出版物

创建supabase_realtime发布并添加您希望 Realtime 监听的表:

  create publication supabase_realtime with (publish = 'insert, update, delete');

alter publication supabase_realtime add table messages, users;
  

realtime Schema

创建实时 schema:

  create schema realtime;
  

supabase_realtime_admin 角色

创建supabase_realtime_admin数据库角色并授予其复制权限:

  create role supabase_realtime_admin with noinherit login password 'secure-password';
  

确保授予supabase_realtime_admin具有复制权限的角色。此步骤因数据库提供程序而异。

例如,如果您的数据库由 AWS RDS 托管,则可以运行:

  grant rds_replication to supabase_realtime_admin;
  

supabase_realtime_admin 特权

授予supabase_realtime_admin实时架构和所有相关实时对象的权限:

  grant all on schema realtime to supabase_realtime_admin;
grant all on all tables in schema realtime to supabase_realtime_admin;
grant all on all sequences in schema realtime to supabase_realtime_admin;
grant all on all routines in schema realtime to supabase_realtime_admin;
  

authenticated 角色

创建经过身份验证的角色:

  create role authenticated nologin noinherit;