> ## 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.

# Google Cloud SQL

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

export const PLATFORM_0 = "Google Cloud SQL"

export const DATA_TYPE_0 = "event table fields"

export const COLUMN_HEADER_0 = "Cloud SQL Field"

export const PROPERTIES_DESCRIPTION_0 = "Event metadata as JSON object"

## Descripción general

La integración OneSignal + Google Cloud SQL habilita la sincronización automática de eventos personalizados desde tu base de datos Cloud SQL a OneSignal. Esto te permite activar Journeys automatizados y campañas de mensajería personalizadas basadas en datos de comportamiento del usuario almacenados en tu base de datos PostgreSQL administrada.

***

## 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)

### Google Cloud SQL

* Instancia de **Cloud SQL para PostgreSQL** (versión 11 o superior recomendada)
* **Acceso a base de datos** con permisos de lectura para tablas de eventos
* **Conectividad de red** desde OneSignal a tu instancia Cloud SQL
* **Cloud SQL Auth proxy** para conexiones seguras (recomendado)

***

## Configuración

<Steps>
  <Step title="Configurar acceso a base de datos Cloud SQL">
    Crea un usuario dedicado para OneSignal con acceso de solo lectura a tablas de eventos:

    ```sql theme={null}
    -- Create OneSignal user
    CREATE USER onesignal_reader WITH PASSWORD 'strong_unique_password';

    -- Grant schema access
    GRANT USAGE ON SCHEMA event_data TO onesignal_reader;

    -- Grant table access
    GRANT SELECT ON ALL TABLES IN SCHEMA event_data TO onesignal_reader;

    -- Grant access to future tables
    ALTER DEFAULT PRIVILEGES IN SCHEMA event_data
    GRANT SELECT ON TABLES TO onesignal_reader;
    ```
  </Step>

  <Step title="Configurar acceso de red">
    Asegúrate de que OneSignal pueda conectarse a tu instancia Cloud SQL:

    **Opción 1: Authorized Networks (IP pública)**

    * En Google Cloud Console, ve a **SQL > Instances**
    * Selecciona tu instancia → **Connections** → **Networking**
    * Agrega direcciones IP de OneSignal a **Authorized networks**

    **Opción 2: IP privada (recomendado)**

    * Configura tu instancia Cloud SQL con una IP privada
    * Usa Cloud SQL Auth Proxy para conexiones seguras
    * Asegura VPC peering o reglas de firewall apropiadas

    **Opción 3: Cloud SQL Auth Proxy**

    * Descarga y configura el Cloud SQL Auth Proxy
    * Usa autenticación de cuenta de servicio
    * Conéctate a través de túnel proxy seguro
  </Step>

  <Step title="Configurar Cloud SQL Auth Proxy (recomendado)">
    Para seguridad mejorada, usa Cloud SQL Auth Proxy:

    ```bash theme={null}
    # Download Cloud SQL Auth Proxy
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64

    # Make executable
    chmod +x cloud_sql_proxy

    # Run proxy (replace with your instance connection name)
    ./cloud_sql_proxy -instances=PROJECT:REGION:INSTANCE=tcp:5432
    ```

    Crea una cuenta de servicio con rol Cloud SQL Client:

    ```bash theme={null}
    gcloud iam service-accounts create onesignal-cloudsql
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:onesignal-cloudsql@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/cloudsql.client"
    ```
  </Step>

  <Step title="Agregar integración en OneSignal">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    Selecciona **Google Cloud SQL** y proporciona:

    * **Instance Connection Name**: `PROJECT_ID:REGION:INSTANCE_ID`
    * **Database Name**: El nombre de tu base de datos de eventos
    * **Username**: `onesignal_reader`
    * **Password**: La contraseña creada en el Paso 1
    * **SSL Mode**: `require` (recomendado para seguridad)
    * **Connection Type**: Elige entre Direct, Auth Proxy o Private IP
  </Step>

  <Step title="Configurar consultas de datos de eventos">
    Define la consulta SQL para recuperar datos de eventos de tu base de datos Cloud SQL:

    ```sql theme={null}
    SELECT
        event_name,
        user_id,
        created_at as event_timestamp,
        properties as event_payload
    FROM event_data.user_events
    WHERE created_at >= CURRENT_TIMESTAMP - INTERVAL '1 hour'
    ORDER BY created_at DESC
    ```

    Asegúrate de que tus tablas de eventos incluyan:

    * Nombre/tipo de evento (String)
    * Identificador de usuario (String)
    * Marca de tiempo del evento (Timestamp)
    * Propiedades del evento (JSON/JSONB)
  </Step>

  <Step title="Probar la conexión">
    Haz clic en **Test Connection** para verificar que OneSignal puede conectarse a tu instancia Cloud SQL y ejecutar la consulta de eventos exitosamente.
  </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       |

***

## Configuración avanzada

### Connection Pooling

Optimiza las conexiones de base de datos para sincronización de eventos de alto volumen:

```sql theme={null}
-- Check current connection limits
SELECT * FROM pg_stat_activity WHERE datname = 'your_database';

-- Optimize for OneSignal connections
ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';
```

### Optimización de consultas

Mejora el rendimiento de consultas de eventos:

```sql theme={null}
-- Create index on timestamp for efficient filtering
CREATE INDEX idx_events_created_at ON user_events(created_at);

-- Create composite index for user-based queries
CREATE INDEX idx_events_user_time ON user_events(user_id, created_at);

-- Analyze query performance
EXPLAIN ANALYZE
SELECT event_name, user_id, created_at, properties
FROM user_events
WHERE created_at >= NOW() - INTERVAL '1 hour';
```

### Manejo de datos JSON

Si usas JSONB para propiedades de eventos, optimiza consultas JSON:

```sql theme={null}
-- Create GIN index for JSON properties
CREATE INDEX idx_events_properties ON user_events USING GIN(properties);

-- Query specific JSON properties
SELECT
    event_name,
    user_id,
    properties->>'purchase_amount' as amount,
    properties->>'product_id' as product
FROM user_events
WHERE properties->>'event_type' = 'purchase';
```

<Warning>
  Monitorea el rendimiento de tu instancia Cloud SQL cuando OneSignal consulta datos de eventos. Considera usar réplicas de lectura para cargas de trabajo de analíticas para evitar impactar el rendimiento de producción.
</Warning>

***

## FAQ

### ¿Con qué frecuencia sincroniza OneSignal eventos desde Cloud SQL?

OneSignal sincroniza datos de eventos basándose en tu programación configurada, con un intervalo mínimo de 15 minutos.

### ¿Puedo usar réplicas de lectura de Cloud SQL para sincronización de eventos?

Sí, usar réplicas de lectura es recomendado para aislar consultas de analíticas de la carga de trabajo de tu base de datos de producción.

### ¿Qué sucede si mi instancia Cloud SQL está temporalmente no disponible?

OneSignal reintentará conexiones con backoff exponencial. La sincronización de eventos se reanudará automáticamente una vez que tu instancia sea accesible nuevamente.
