Firebase
Firebase 是一个围绕非关系型技术构建的应用开发平台。Firebase 封装器支持连接到以下对象。
- 认证用户 (只读)
- Firestore 数据库文档 (只读)
准备
在开始之前,请确保您的数据库上安装了wrappers
扩展:
create extension if not exists wrappers with schema extensions;
然后创建外部数据封装器:
create foreign data wrapper firebase_wrapper
handler firebase_fdw_handler
validator firebase_fdw_validator;
安全保护您的凭证(可选)
默认情况下,Postgres 将 FDW 凭证以明文形式存储在 pg_catalog.pg_foreign_server
中。任何有权访问此表的人都能够查看这些凭证。封装器设计为与 Vault 配合使用,Vault 为存储凭证提供了额外的安全级别。我们建议您使用 Vault 存储您的凭证。
-- Save your Firebase credentials in Vault and retrieve the `key_id`
insert into vault.secrets (name, secret)
values (
'firebase',
'{
"type": "service_account",
"project_id": "your_gcp_project_id",
...
}'
)
returning key_id;
连接到 Firebase
我们需要为 Postgres 提供连接到 Firebase 的凭证和任何额外的选项。我们可以使用 create server
命令来完成这个操作:
使用Vault
create server firebase_server
foreign data wrapper firebase_wrapper
options (
sa_key_id '<key_ID>', -- The Key ID from above.
project_id '<firebase_project_id>'
);
不使用Vault
create server firebase_server
foreign data wrapper firebase_wrapper
options (
sa_key '
{
"type": "service_account",
"project_id": "your_gcp_project_id",
...
}
',
project_id 'firebase_project_id'
);
创建外部表
Firebase 封装器支持从以下 Firebase 对象读取数据:
Firebase | Select | Insert | Update | Delete | Truncate |
---|---|---|---|---|---|
认证用户 | ✅ | ❌ | ❌ | ❌ | ❌ |
Firestore 数据库文档 | ✅ | ❌ | ❌ | ❌ | ❌ |
例如:
create foreign table firebase_users (
uid text,
email text,
created_at timestamp,
attrs jsonb
)
server firebase_server
options (
object 'auth/users'
);
注意,外部表中有一个元数据列 attrs
,它包含了从 Firebase 返回的所有数据,格式为 json。
外部表选项
完整的外部表选项如下:
-
object
- Firebase 中的对象名称,必需.对于认证用户,对象名称固定为
auth/users
. 对于 Firestore 文档,其格式为firestore/<collection_id>
, 注意集合 ID 必须是完整路径 ID。例如,firestore/my-collection
firestore/my-collection/my-document/another-collection
查询下推支持
这个 FDW 不支持查询下推。
示例
一些关于如何使用 Firebase 外部表的示例。
firestore
要映射 Firestore 集合,请使用格式firestore/<collection_id>
作为 object
选项,如下所示。
create foreign table firebase_docs (
name text,
created_at timestamp,
updated_at timestamp,
attrs jsonb
)
server firebase_server
options (
object 'firestore/user-profiles'
);
注意, name
, created_at
和 updated_at
是所有 Firestore 集合上的自动元数据字段。
auth/users
auth/users
集合是一个具有唯一元数据的特殊案例。以下展示了如何将 Firebase 用户映射到 PostgreSQL 表。
create foreign table firebase_users (
uid text,
email text,
created_at timestamp,
attrs jsonb
)
server firebase_server
options (
object 'auth/users'
);