跳转到主要内容

概述

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 数据库。事件同步查询本质上是分析性的,可能影响生产性能。仅用于为分析工作负载设置的数据库。

设置

1

为 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;
2

授予事件数据权限

为包含事件数据的架构提供读取权限:
-- 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;
3

连接到 OneSignal

在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成
  1. 从列表中选择 PostgreSQL
  2. 输入您的连接详细信息:
    • Host: 您的 PostgreSQL 服务器主机名
    • Port: 通常为 5432
    • Database: 您的数据库名称
    • Username: CENSUS
    • Password: 您创建的密码
  3. 测试连接
  4. 配置包含事件数据的表

事件数据映射

将您的 映射到 OneSignal 的自定义事件格式:
OneSignal 字段描述必需
nameevent_name事件标识符
external_iduser_id用户标识符
timestampevent_timestamp事件发生时间
propertiesevent_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 实例:
  1. Create SSH user: 在您的 SSH 主机上设置专用用户
  2. Configure tunnel: 在 OneSignal 集成设置中启用”使用 SSH 隧道”
  3. Install keypair: 将 OneSignal 的公钥添加到 ~/.ssh/authorized_keys
  4. Test connection: 验证隧道连接性

注意事项

  • Multiple Schemas: 为每个包含事件数据的架构重复权限授予
  • Views with Cross-Schema References: 在旧版本的 PostgreSQL 中可能需要额外的读取权限
  • Azure PostgreSQL: 对于 Azure 实例使用 username@hostname 格式
  • AWS RDS: 使用标准的 username 格式
  • Performance: 考虑在大规模事件处理时使用只读副本

限制

  • 由于分析查询开销,避免连接到生产数据库
  • 复杂的跨架构查询可能需要额外的权限
  • 对于高频率事件处理建议使用连接池

FAQ

我应该使用只读模式吗?

如果您希望设置更简单并且不允许 OneSignal 创建表,请使用只读模式。对于大型事件数据集,使用完整模式获得更好的性能。

如何处理多个事件架构?

为每个包含事件数据的架构重复执行权限授予命令。OneSignal 可以在单个连接中从多个架构读取数据。
I