自带数据库
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
此角色已硬编码到实时迁移中,因此暂时是必需的。