OneSignal + PostgreSQL 集成允许将自定义事件从 PostgreSQL 数据库同步到 OneSignal,以根据用户行为触发自动化消息活动和 Journey。
- 访问自定义事件(目前处于测试阶段)
- 升级账户计划(免费应用不可用)。
PostgreSQL
- PostgreSQL 9.6+ or compatible database
- Database user with appropriate permissions
- Network access from OneSignal to your PostgreSQL instance
- Event tables containing structured behavioral data
我们 强烈不建议 将 OneSignal 连接到生产环境的 PostgreSQL 数据库。事件同步查询本质上是分析性的,可能影响生产性能。仅用于为分析工作负载设置的数据库。
为 OneSignal 创建专用用户
使用适当的权限创建专用用户账户:-- Create OneSignal user with strong password
CREATE USER CENSUS WITH PASSWORD '<strong-unique-password>';
-- Create private bookkeeping schema for sync state (skip if read-only mode)
CREATE SCHEMA CENSUS;
-- Grant full access to bookkeeping schema (skip if read-only mode)
GRANT ALL ON SCHEMA CENSUS TO CENSUS;
-- Ensure access to existing objects in bookkeeping schema (skip if read-only mode)
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
授予事件数据权限
为包含事件数据的架构提供读取权限:-- Grant schema access (repeat for each schema with event data)
GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;
-- Grant read access to existing tables
GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;
-- Grant read access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;
-- Grant execute permissions on functions
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
连接到 OneSignal
在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成。
- 从列表中选择 PostgreSQL
- 输入您的连接详细信息:
- Host: 您的 PostgreSQL 服务器主机名
- Port: 通常为 5432
- Database: 您的数据库名称
- Username:
CENSUS
- Password: 您创建的密码
- 测试连接
- 配置包含事件数据的表
事件数据映射
将您的 映射到 OneSignal 的自定义事件格式:
| OneSignal 字段 | 描述 | 必需 | |
|---|
name | event_name | 事件标识符 | 是 |
external_id | user_id | 用户标识符 | 是 |
timestamp | event_timestamp | 事件发生时间 | 否 |
properties | event_data | 否 | |
示例事件表架构
-- Example PostgreSQL event table
CREATE TABLE analytics.user_events (
event_id SERIAL PRIMARY KEY,
event_name VARCHAR(100) NOT NULL,
user_id VARCHAR(255) NOT NULL,
event_timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
event_data JSONB,
session_id VARCHAR(255),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
SQL 查询模式
编写自定义 SQL 查询来转换您的事件数据:
-- Example: Recent purchase events
SELECT
event_name,
user_id,
event_timestamp,
event_data
FROM analytics.user_events
WHERE event_timestamp >= NOW() - INTERVAL '7 days'
AND event_name = 'purchase'
ORDER BY event_timestamp DESC;
高级网络配置
OneSignal 可以使用高级网络控制连接到 PostgreSQL 实例:
- IP Allow Lists: 将 OneSignal 的 IP 地址添加到您的防火墙和
pg_hba.conf
- SSH Tunneling: 通过保垒主机连接私有网络
- VPC Configuration: 云环境内的直接连接
- TLS Encryption: 使用 SSL/TLS 的安全连接
SSH 隧道设置
对于私有网络上的 PostgreSQL 实例:
- Create SSH user: 在您的 SSH 主机上设置专用用户
- Configure tunnel: 在 OneSignal 集成设置中启用”使用 SSH 隧道”
- Install keypair: 将 OneSignal 的公钥添加到
~/.ssh/authorized_keys
- Test connection: 验证隧道连接性
注意事项
- Multiple Schemas: 为每个包含事件数据的架构重复权限授予
- Views with Cross-Schema References: 在旧版本的 PostgreSQL 中可能需要额外的读取权限
- Azure PostgreSQL: 对于 Azure 实例使用
username@hostname 格式
- AWS RDS: 使用标准的
username 格式
- Performance: 考虑在大规模事件处理时使用只读副本
- 由于分析查询开销,避免连接到生产数据库
- 复杂的跨架构查询可能需要额外的权限
- 对于高频率事件处理建议使用连接池
FAQ
我应该使用只读模式吗?
如果您希望设置更简单并且不允许 OneSignal 创建表,请使用只读模式。对于大型事件数据集,使用完整模式获得更好的性能。
如何处理多个事件架构?
为每个包含事件数据的架构重复执行权限授予命令。OneSignal 可以在单个连接中从多个架构读取数据。