> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PostgreSQL

> Sincroniza eventos personalizados desde PostgreSQL a OneSignal para activar Journeys automatizados y campañas de mensajería personalizadas basadas en el comportamiento del usuario.

export const PLATFORM_0 = "PostgreSQL"

export const DATA_TYPE_0 = "columns"

export const COLUMN_HEADER_0 = "PostgreSQL Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event details"

## Resumen

La integración de OneSignal + PostgreSQL permite la sincronización de eventos personalizados desde tu base de datos PostgreSQL a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en el comportamiento del usuario.

***

## Requisitos

* Access to [Event Streams](/docs/en/event-streams) for outbound message events (Plan limitations and overages apply)
* Access to [Custom Events](/docs/en/custom-events) for inbound event syncing (Plan limitations and overages apply)
* [Updated Account Plan](https://onesignal.com/pricing) (not available on free apps)

### PostgreSQL

* **PostgreSQL 9.6+** o base de datos compatible
* **Usuario de base de datos** con permisos apropiados
* **Acceso de red** desde OneSignal a tu instancia de PostgreSQL
* **Tablas de eventos** que contengan datos comportamentales estructurados

<Warning>
  **Recomendamos encarecidamente** no conectar OneSignal a una base de datos PostgreSQL de producción. Las consultas de sincronización de eventos son de naturaleza analítica y pueden impactar el rendimiento de producción. Usar solo con bases de datos configuradas para cargas de trabajo analíticas.
</Warning>

***

## Configuración

<Steps>
  <Step title="Crear usuario dedicado para OneSignal">
    Crea una cuenta de usuario dedicada con permisos apropiados:

    ```sql theme={null}
    -- Crear usuario OneSignal con contraseña fuerte
    CREATE USER CENSUS WITH PASSWORD '<strong-unique-password>';

    -- Crear schema de contabilidad privado para estado de sincronización (omitir si modo solo lectura)
    CREATE SCHEMA CENSUS;

    -- Otorgar acceso completo a schema de contabilidad (omitir si modo solo lectura)
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Asegurar acceso a objetos existentes en schema de contabilidad (omitir si modo solo lectura)
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="Otorgar permisos a datos de eventos">
    Proporciona acceso de lectura a schemas que contengan tus datos de eventos:

    ```sql theme={null}
    -- Otorgar acceso a schema (repetir para cada schema con datos de eventos)
    GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

    -- Otorgar acceso de lectura a tablas existentes
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

    -- Otorgar acceso de lectura a tablas futuras
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Otorgar permisos de ejecución en funciones
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```
  </Step>

  <Step title="Conectar a OneSignal">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    1. Selecciona **PostgreSQL** de la lista
    2. Ingresa tus detalles de conexión:
       * **Host:** El nombre de host de tu servidor PostgreSQL
       * **Port:** Usualmente 5432
       * **Database:** El nombre de tu base de datos
       * **Username:** `CENSUS`
       * **Password:** La contraseña que creaste
    3. Prueba la conexión
    4. Configura qué tablas contienen tus datos de eventos
  </Step>
</Steps>

***

### Event data mapping

Map your {PLATFORM_0} {DATA_TYPE_0} to OneSignal's custom events format:

| OneSignal Field | {COLUMN_HEADER_0} | Description                | Required |
| --------------- | ----------------- | -------------------------- | -------- |
| `name`          | `event_name`      | Event identifier           | Yes      |
| `external_id`   | `user_id`         | User identifier            | Yes      |
| `timestamp`     | `event_timestamp` | When event occurred        | No       |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No       |

### Ejemplo de Schema de Tabla de Eventos

```sql theme={null}
-- Ejemplo de tabla de eventos PostgreSQL
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()
);
```

### Modo de Consulta SQL

Escribe consultas SQL personalizadas para transformar tus datos de eventos:

```sql theme={null}
-- Ejemplo: Eventos de compra recientes
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;
```

***

## Configuración Avanzada de Red

OneSignal puede conectarse a instancias de PostgreSQL usando controles de red avanzados:

* **Listas de Permitidos de IP**: Agrega las direcciones IP de OneSignal a tu firewall y `pg_hba.conf`
* **Tunelización SSH**: Conéctate a través de un host bastión para redes privadas
* **Configuración VPC**: Conexión directa dentro de entornos en la nube
* **Cifrado TLS**: Conexiones seguras usando SSL/TLS

### Configuración de Túnel SSH

Para instancias de PostgreSQL en redes privadas:

1. **Crear usuario SSH**: Configura un usuario dedicado en tu host SSH
2. **Configurar túnel**: Habilita "Use SSH Tunnel" en la configuración de integración de OneSignal
3. **Instalar par de claves**: Agrega la clave pública de OneSignal a `~/.ssh/authorized_keys`
4. **Probar conexión**: Verifica la conectividad del túnel

***

## Notas

* **Múltiples Schemas**: Repite las concesiones de permisos para cada schema que contenga datos de eventos
* **Vistas con Referencias Entre Schemas**: Pueden requerir permisos de lectura adicionales en versiones antiguas de PostgreSQL
* **Azure PostgreSQL**: Usa el formato `username@hostname` para instancias de Azure
* **AWS RDS**: Usa el formato estándar `username`
* **Rendimiento**: Considera usar réplicas de lectura para procesamiento de eventos a gran escala

***

## Limitaciones

* Evita conectar a bases de datos de producción debido a la sobrecarga de consultas analíticas
* Las consultas complejas entre schemas pueden requerir permisos adicionales
* Se recomienda agrupación de conexiones para procesamiento de eventos de alta frecuencia

***

## FAQ

### ¿Debería usar modo solo lectura?

Usa **modo solo lectura** si prefieres una configuración más simple y no puedes permitir que OneSignal cree tablas. Usa **modo completo** para mejor rendimiento con conjuntos de datos de eventos grandes.

### ¿Cómo manejo múltiples schemas de eventos?

Repite los comandos de concesión de permisos para cada schema que contenga datos de eventos. OneSignal puede leer desde múltiples schemas dentro de una sola conexión.
