自带数据库

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

note

为Realtime设置数据库后,如果您想将数据库与托管的Supabase Realtime一起使用。

以下步骤将确保您的数据库已正确设置为使用 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 监听的表:

1create publication supabase_realtime with (publish = 'insert, update, delete');
2
3alter publication supabase_realtime add table messages, users;

tip

如果有效负载包含 401 Unauthorized,则需要向要授权的数据库角色的表授予select权限,以接收数据库更改:

1grant select on table messages to anon;

realtime Schema#

创建实时 schema:

1create schema realtime;

supabase_realtime_admin 角色#

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

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

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

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

1grant rds_replication to supabase_realtime_admin;

supabase_realtime_admin 特权#

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

1grant all on schema realtime to supabase_realtime_admin;
2grant all on all tables in schema realtime to supabase_realtime_admin;
3grant all on all sequences in schema realtime to supabase_realtime_admin;
4grant all on all routines in schema realtime to supabase_realtime_admin;

authenticated 角色#

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

1create role authenticated nologin noinherit;

note

此角色已硬编码到实时迁移中,因此暂时是必需的。