---
title: 'Query with Postgres'
subtitle: 'Query analytics bucket data directly from Postgres using SQL.'
---

Once your data flows into an analytics bucket through your own ingestion pipeline, you can query it directly from Postgres using standard SQL.

This is made possible by the [Iceberg Foreign Data Wrapper](/docs/guides/database/extensions/wrappers/iceberg), which creates a bridge between your Postgres database and Iceberg tables.

<Admonition type="note" title="About ingestion">

Replication into Analytics Buckets via Supabase Pipelines is no longer supported. This guide assumes your Analytics Bucket is being populated by your own ingestion pipeline.

</Admonition>

## Setup overview

You have two options to enable querying:

1. **Dashboard UI** (recommended) - Streamlined setup through the Supabase Dashboard
2. **Manual installation** - Install the wrapper using SQL and configuration

## Installing via Dashboard UI

The dashboard provides the easiest setup experience:

1. Navigate to your **Analytics Bucket** page in the Supabase Dashboard.
2. Locate the namespace you want to query and click **Query with Postgres**.

<Image
  alt="Query with Postgres button on analytics bucket page"
  src="/docs/img/storage/query-analytics-with-postgres.png"

width={1860}
height={332}
/>

3. Enter the **Postgres schema** where you want to create the foreign tables.

<Image
  alt="Select destination Postgres schema"
  src="/docs/img/storage/query-analytics-schema-name.png"

width={525}
height={297}
/>

4. Click **Connect**. The wrapper is now configured.

## Querying your data

Once the foreign data wrapper is installed, you can query your Iceberg tables using standard SQL:

```sql
select *
from schema_name.table_name
limit 100;
```

### Common query examples

Get the latest events:

```sql
select event_id, event_name, event_timestamp
from analytics.events
order by event_timestamp desc
limit 1000;
```

Join with transactional data:

```sql
SELECT
  e.event_id,
  e.event_name,
  u.user_email
FROM analytics.events e
JOIN public.users u ON e.user_id = u.id
WHERE e.event_timestamp > NOW() - INTERVAL '7 days'
LIMIT 100;
```

## Manual installation

For advanced use cases, you can manually install and configure the Iceberg Foreign Data Wrapper. See the [Iceberg Foreign Data Wrapper documentation](/docs/guides/database/extensions/wrappers/iceberg) for detailed instructions.
