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

# JDBC catalog

> Connect RisingWave to a JDBC-compliant catalog for Apache Iceberg.

A JDBC catalog stores Iceberg table metadata in a relational database like PostgreSQL. You can use a JDBC catalog with RisingWave when creating an Iceberg `SOURCE`, `SINK`, or `CONNECTION` (for internal Iceberg tables).

<Note>
  For a complete list of all catalog-related parameters, see the main [Catalog configuration](/iceberg/catalogs#catalog-parameters) page.
</Note>

## Example

<Tabs>
  <Tab title="Internal tables (recommended)">
    ```sql theme={null}
    CREATE CONNECTION jdbc_conn WITH (
        type = 'iceberg',
        warehouse.path = 's3://my-bucket/warehouse/',
        s3.region = 'us-west-2',
        s3.access.key = '...',
        s3.secret.key = '...',
        enable_config_load = false,

        catalog.type = 'jdbc',
        catalog.uri = 'jdbc:postgresql://postgres:5432/iceberg_db',
        catalog.jdbc.user = 'user',
        catalog.jdbc.password = 'password'
    );

    SET iceberg_engine_connection = 'public.jdbc_conn';

    -- `commit_checkpoint_interval` controls Iceberg commit frequency. Default: about every 60 seconds; set to 1 for faster commits and visibility.
    CREATE TABLE my_internal_iceberg_table (
      id INT PRIMARY KEY,
      name VARCHAR
    )
    WITH (commit_checkpoint_interval = 1)
    ENGINE = iceberg;
    ```
  </Tab>

  <Tab title="Write (CREATE SINK)">
    ```sql theme={null}
    CREATE SINK my_jdbc_sink FROM my_mv WITH (
        connector = 'iceberg',
        type = 'upsert',
        primary_key = 'id',
        catalog.type = 'jdbc',
        catalog.uri = 'jdbc:postgresql://postgres:5432/iceberg_db',
        catalog.jdbc.user = 'user',
        catalog.jdbc.password = 'password',
        warehouse.path = 's3://my-bucket/warehouse/',
        s3.region = 'us-west-2',
        s3.access.key = '...',
        s3.secret.key = '...',
        database.name = 'my_db',
        create_table_if_not_exists = 'true',
        table.name = 'my_table'
    );
    ```
  </Tab>

  <Tab title="Read (CREATE SOURCE)">
    ```sql theme={null}
    CREATE SOURCE my_jdbc_source WITH (
        connector = 'iceberg',
        catalog.type = 'jdbc',
        catalog.uri = 'jdbc:postgresql://postgres:5432/iceberg_db',
        catalog.jdbc.user = 'user',
        catalog.jdbc.password = 'password',
        warehouse.path = 's3://my-bucket/warehouse/',
        s3.region = 'us-west-2',
        s3.access.key = '...',
        s3.secret.key = '...',
        database.name = 'my_db',
        table.name = 'my_table'
    );
    ```
  </Tab>
</Tabs>
