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

> Sincronize eventos personalizados do PostgreSQL para o OneSignal para acionar Jornadas automatizadas e campanhas de mensagens personalizadas com base no comportamento do usuário.

export const PLATFORM_0 = "PostgreSQL"

export const DATA_TYPE_0 = "columns"

export const COLUMN_HEADER_0 = "Coluna PostgreSQL"

export const PROPERTIES_DESCRIPTION_0 = "Objeto JSON com detalhes do evento"

## Visão Geral

A integração OneSignal + PostgreSQL permite a sincronização de eventos personalizados do seu banco de dados PostgreSQL para o OneSignal para acionar campanhas de mensagens automatizadas e Jornadas com base no comportamento do usuário.

***

## 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+** ou banco de dados compatível
* **Usuário do banco de dados** com permissões apropriadas
* **Acesso de rede** do OneSignal à sua instância PostgreSQL
* **Tabelas de eventos** contendo dados comportamentais estruturados

<Warning>
  Nós **recomendamos fortemente contra** conectar o OneSignal a um banco de dados PostgreSQL de produção. As consultas de sincronização de eventos são de natureza analítica e podem impactar o desempenho de produção. Use apenas com bancos de dados configurados para cargas de trabalho analíticas.
</Warning>

***

## Configuração

<Steps>
  <Step title="Criar usuário dedicado para OneSignal">
    Crie uma conta de usuário dedicada com permissões apropriadas:

    ```sql theme={null}
    -- Criar usuário OneSignal com senha forte
    CREATE USER CENSUS WITH PASSWORD '<strong-unique-password>';

    -- Criar esquema privado de contabilidade para estado de sincronização (pule se modo somente leitura)
    CREATE SCHEMA CENSUS;

    -- Conceder acesso completo ao esquema de contabilidade (pule se modo somente leitura)
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Garantir acesso a objetos existentes no esquema de contabilidade (pule se modo somente leitura)
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="Conceder permissões aos dados de eventos">
    Forneça acesso de leitura aos esquemas contendo seus dados de eventos:

    ```sql theme={null}
    -- Conceder acesso ao esquema (repita para cada esquema com dados de eventos)
    GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

    -- Conceder acesso de leitura a tabelas existentes
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

    -- Conceder acesso de leitura a tabelas futuras
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Conceder permissões de execução em funções
    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 ao OneSignal">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    1. Selecione **PostgreSQL** da lista
    2. Insira seus detalhes de conexão:
       * **Host:** Nome do host do seu servidor PostgreSQL
       * **Port:** Geralmente 5432
       * **Database:** Nome do seu banco de dados
       * **Username:** `CENSUS`
       * **Password:** A senha que você criou
    3. Teste a conexão
    4. Configure quais tabelas contêm seus dados 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       |

### Exemplo de Esquema de Tabela de Eventos

```sql theme={null}
-- Exemplo de tabela 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

Escreva consultas SQL personalizadas para transformar seus dados de eventos:

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

***

## Configuração Avançada de Rede

O OneSignal pode conectar a instâncias PostgreSQL usando controles avançados de rede:

* **Listas de Permissão de IP**: Adicione os endereços IP do OneSignal ao seu firewall e `pg_hba.conf`
* **Tunelamento SSH**: Conecte através de um host bastion para redes privadas
* **Configuração VPC**: Conexão direta dentro de ambientes de nuvem
* **Criptografia TLS**: Conexões seguras usando SSL/TLS

### Configuração do Túnel SSH

Para instâncias PostgreSQL em redes privadas:

1. **Criar usuário SSH**: Configure um usuário dedicado em seu host SSH
2. **Configurar túnel**: Ative "Usar Túnel SSH" nas configurações de integração do OneSignal
3. **Instalar par de chaves**: Adicione a chave pública do OneSignal a `~/.ssh/authorized_keys`
4. **Testar conexão**: Verifique a conectividade do túnel

***

## Notas

* **Múltiplos Esquemas**: Repita as concessões de permissão para cada esquema contendo dados de eventos
* **Views com Referências entre Esquemas**: Podem requerer permissões de leitura adicionais em versões mais antigas do PostgreSQL
* **Azure PostgreSQL**: Use o formato `username@hostname` para instâncias do Azure
* **AWS RDS**: Use o formato padrão `username`
* **Desempenho**: Considere usar réplicas de leitura para processamento de eventos em larga escala

***

## Limitações

* Evite conectar a bancos de dados de produção devido à sobrecarga de consultas analíticas
* Consultas complexas entre esquemas podem requerer permissões adicionais
* Pooling de conexão recomendado para processamento de eventos de alta frequência

***

## FAQ

### Devo usar o modo somente leitura?

Use **modo somente leitura** se preferir uma configuração mais simples e não puder permitir que o OneSignal crie tabelas. Use **modo completo** para melhor desempenho com grandes conjuntos de dados de eventos.

### Como lido com múltiplos esquemas de eventos?

Repita os comandos de concessão de permissão para cada esquema contendo dados de eventos. O OneSignal pode ler de múltiplos esquemas dentro de uma única conexão.
