# Connecting to Postgres SQL database

Once you select Postgres from **Data → Connect**, you are presented with a form to specify your connection parameters.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/2wlTtpNUJHZGioIVnnzi/image.png" alt="" width="563"><figcaption><p>Connecting to Postgres</p></figcaption></figure>

1. **Hostname:** The network location (DNS or IP address) of your Postgres SQL server. Without a correct hostname, Tellius cannot establish a connection.
2. **Port:** Databases listen on specific ports. Specify the port number through which Postgres SQL communicates. Providing the correct port ensures your requests reach the right service.
3. **Database:** Postgres SQL servers can host multiple databases. The specific Postgres SQL database (schema) you want to connect to (e.g., `QA1`). Specifying the exact one ensures you query the intended dataset.
4. **Schema:** Postgres organizes tables under schemas. Specify the schema name within the database.
5. **User:** Provide the username with appropriate permissions (atleast read-access) to read data.
6. **Password:** Provide the corresponding password for the **User** provided.
7. **Datasource Name:** A user-friendly name for this connection in Tellius.
8. **Save and Browse Host:** Saves the connection details and attempts to browse the host for available schemas and tables. This initiates the handshake with the Postgres SQL server.

{% hint style="info" %}
If your database is behind a firewall, we display a Tellius IP address in this page that you may need to whitelist.
{% endhint %}

### Using validated datasource connection details

If you’ve previously validated and saved a Postgres SQL connection, you can reuse its details:

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/6YroDcE1dcieEULZU6VP/image.png" alt="" width="563"><figcaption><p>Using already established connections</p></figcaption></figure>

1. **Use validated datasource connection details:** When enabled, it reveals a dropdown to choose from existing, previously configured Postgres SQL connections.
2. **Select datasource:** Lists all pre-validated Postgres SQL connections. Select the one you want to reuse and all the fields will be filled automatically as configured.
3. **Browse Host:** Similar to **“Save and Browse Host”**, but now it just navigates forward using the chosen existing connection’s parameters.

### Advanced Options

Use the **Advanced option** if your environment requires a non-standard connection string, advanced JDBC parameters, or direct control over the URL. Otherwise, the standard fields usually suffice.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/5pazRBDBRy7JacHzmw4O/image.png" alt="" width="563"><figcaption><p>Advanced Options</p></figcaption></figure>

Enabling **Advanced option** reveals additional fields, such as:

1. **JDBC URL:** A full Postgres JDBC connection string (e.g., `jdbc:postgresql://52.11.111.11:1521/databaseName`).
2. **Schema:** Postgres organizes tables under schemas. Specify the schema name within the database.
3. **User:** Provide the username with appropriate permissions (atleast read-access) to read data.
4. **Password:** Provide the corresponding password for the **User** provided.
5. **Datasource Name:** A user-friendly name for this connection in Tellius.
6. **Save and Browse Host:** Saves the connection details and attempts to browse the host for available schemas and tables. This initiates the handshake with the Postgres SQL server.

### Loading tables

After establishing a connection, you will see options to load data from Postgres SQL tables.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/oeQqWj6Kmfe628eYyOhM/image.png" alt="" width="563"><figcaption><p>Loading tables</p></figcaption></figure>

1. **Select a table**: Displays all available tables under the chosen Postgres SQL schema. Pick the tables you need for analysis. If there are many tables, you can narrow down your selection.
2. **Search for table:** Filters the displayed tables based on your search term.
3. **Import:** Imports the selected table(s) into Tellius.

### Using Custom SQL

If you prefer more granular control or want to write your own SQL queries to load precisely the data you need, switch to "**Custom SQL**" tab.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/HWDigfEokVZlWyyXaPwN/image.png" alt="" width="563"><figcaption><p>Custom SQL window</p></figcaption></figure>

1. **Table filter**: Helps locate a particular table by name before writing your SQL.
2. **Select a table**: Choose a table name to use in your custom query.
3. **Query:** A field for your custom SQL statement (e.g., `SELECT * FROM SYS.WRI$_DBU_CPU_USAGE`).
4. **Preview:** Executes the SQL query and displays a few sample rows of the data you’re about to import in the **“Dataset Preview”** area. Allows you to validate that the query returns the correct data before fully importing it. This helps catch syntax errors or incorrect filters early.
5. **Import:** Once satisfied with the preview, click **Import** to load the data returned by the SQL query into Tellius.

### Advanced Settings

Once you import, you’ll have the option to refine how the dataset is handled:

1. **Dataset name:** Assign a valid name to your new dataset (e.g., `XYZ_THRESHOLD`). Names should follow the allowed naming conventions (letters, numbers, underscores, no leading underscores/numbers, no special chars/spaces).
2. **Connection Mode**\
   When the **Live** checkbox is selected, the queries will be fetched from the database each time, and the data will not be copied to Tellius. Live mode ensures the most up-to-date data at the cost of potential query latency.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/cb7CFrFlETsCNvcvQFxI/image.png" alt="" width="563"><figcaption><p>Advanced Settings</p></figcaption></figure>

{% hint style="warning" %}
When **Live** mode is enabled, then only **Create Business View** option will be displayed.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/WOD524c6AVanfclr9EDN/image.png" alt="" width="563"><figcaption><p>For non-live datasets</p></figcaption></figure>

3. **Copy to system**: If enabled, copies the imported data onto Tellius’s internal storage for faster performance. Reduces dependency on the source database’s speed and network latency. Good for frequently queried datasets.
4. **Cache dataset in memory:** If enabled, keeps a cached copy of the dataset in memory (RAM) for even faster query responses. Memory caching dramatically reduces query time, beneficial for dashboards and frequently accessed data.

When only one table is imported, the following options will also be displayed:

5. **Partitioning:** If enabled, it splits a large dataset into smaller logical chunks (partitions). Improves performance on large tables, enabling parallel processing and faster load times. For more details, check out [this](https://app.gitbook.com/o/S3VKMrzMgXbC36NqGRj8/s/JHwf1QFuv1BRPzfSnL2Z/~/changes/137/data/create-new-datasource/understanding-partitioning-your-data) dedicated page on **Partitioning**.

* **Partition column**: The column used as a basis for partitioning.
* **Number of partitions**: How many segments to break the data into. (e.g., 5 partitions)
* **Lower bound/Upper bound**: Approximate value range in the partition column to evenly distribute data.

6. **Create Business View**: If enabled, after loading data, you will be guided into the Business View creation stage.

Click on **Load** to finalize the process. After clicking **Load**, your dataset appears under **Data → Dataset**, ready for exploration, preparation, or business view configuration. Else, click on **Cancel** to discard the current importing process without creating the dataset.

After the dataset is created, you can navigate to **"Dataset",** where you can **r**eview and further refine your newly created dataset. Apply transformations, joins, or filters in the **Prepare** module.

### Editing the SQL Load

After you have created and saved a dataset, there may be situations where you need to modify the underlying SQL query or adjust how the data is partitioned. For example, you might need to update the SQL query to include additional columns, apply a new filter, join to another table, or adjust partitioning parameters.

1. After loading all the datasets, click on the three-dot menu of the required Postgres SQL dataset under **Data → Datasets**, and select **Edit SQL load** from the menu. The following window will be displayed.

<figure><img src="https://content.gitbook.com/content/8GaK1h3pmgbR63x0ftET/blobs/Z7Fp3XjHmRYwOKMsDq7k/image.png" alt="" width="563"><figcaption><p>Custom SQL Load</p></figcaption></figure>

1. Inside the dialog, you will see an interface with two toggles at the top: **Query** and **DBTable**.
2. Choose **Query** if you want to enter or modify a custom SQL query directly. If your data retrieval logic involves multiple joins, in-line calculations, or advanced filters that are easier to express in SQL, the Query option is more appropriate. The **Query** field is where you will paste or write your updated SQL code.
3. You would choose DBTable if you simply want to select one (or more) tables directly from your database without writing or maintaining a custom SQL query. This approach is often easier and more straightforward when you don’t need complex joins, filters, or transformations—Tellius will handle the basic data retrieval automatically.
4. Update the SQL text in the **Query** section as needed. For example, you might add a filter `WHERE` clause, join another table, or select additional columns.
5. After making changes, click **Run Validation** to ensure that the updated SQL is syntactically correct and returns data.
6. Below the **Query** section, you’ll find the **Partitioning** (optional) toggle. Partitioning divides the dataset into smaller chunks based on a chosen numeric column. This can vastly improve performance and reduce load times on large datasets.
7. Toggle the **Partitioning** switch to turn it on. For more details on **Partitioning** and its fields, please check out [this](https://help.tellius.com/data/create-new-datasource/understanding-partitioning-your-data) page.
