> For the complete documentation index, see [llms.txt](https://docs.ovaledge.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ovaledge.com/connectors/connector-repositories/rdbms/postgresql.md).

# PostgreSQL

This article outlines the integration with the PostgreSQL connector, enabling efficient data management through features such as crawling, profiling, query sheet, data preview, and lineage building (both automatic and manual).

The connector establishes connectivity to PostgreSQL through JDBC and uses service account credentials to access the PostgreSQL database and its metadata objects. It supports authentication through Username and Password credentials configured for the PostgreSQL service account.

<div align="left"><figure><img src="https://1813356899-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhTnkoJQml0pok9awFDhx%2Fuploads%2FJ1q6WrdIMbEFeVVmgYbb%2Fimage.png?alt=media&amp;token=95265758-4180-475c-aba9-3777f2b198b3" alt=""><figcaption></figcaption></figure></div>

## **Overview**

### **Connector Details**

<table data-header-hidden><thead><tr><th width="421.5"></th><th></th></tr></thead><tbody><tr><td>Connector Category</td><td>RDBMS</td></tr><tr><td>OvalEdge Release Supported</td><td>Release6.x and later</td></tr><tr><td><p>Connectivity</p><p><em>[How the connection is established with PostgreSQL]</em></p></td><td>JDBC</td></tr><tr><td>Verified PostgreSQL Version</td><td>Above 6.0</td></tr></tbody></table>

{% hint style="info" %}
The PostgreSQL connector has been validated with the mentioned "Verified PostgreSQL Versions" and is expected to be compatible with other supported PostgreSQL Versions. If there are any validation or metadata crawling issues, please submit a support ticket for investigation and feedback.
{% endhint %}

### **Connector Features**

| Feature                                      |                                                                     Availability                                                                     |
| -------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------: |
| Crawling                                     |                                                                           ✅                                                                          |
| Delta Crawling                               |                                                                           ❌                                                                          |
| Profiling                                    |                                                                           ✅                                                                          |
| Query Sheet                                  |                                                                           ✅                                                                          |
| Data Preview                                 |                                                                           ✅                                                                          |
| Auto Lineage                                 | <p>✅<br>To learn more, click <a href="https://docs.ovaledge.com/connectors/connector-repositories/rdbms/postgresql/postgresql-lineage">here</a>.</p> |
| Manual Lineage                               |                                                                           ✅                                                                          |
| Secure Authentication via Credential Manager |                                                                           ✅                                                                          |
| Data Quality                                 |                                                                           ✅                                                                          |
| DAM (Data Access Management)                 |                                                                           ❌                                                                          |
| Bridge                                       |                                                                           ✅                                                                          |

### Metadata Mapping

The following objects are crawled from PostgreSQL and mapped to the corresponding UI assets.

<table><thead><tr><th width="177.33331298828125">PostgreSQL Object</th><th width="245.1666259765625">PostgreSQL Attribute</th><th width="197.1666259765625">OvalEdge Attribute</th><th width="191.333251953125">OvalEdge Category</th><th width="176.3333740234375">OvalEdge Type</th></tr></thead><tbody><tr><td>Table</td><td>Table Name</td><td>Table</td><td>Tables</td><td>table</td></tr><tr><td>Table</td><td>Table Type</td><td>Table</td><td>Tables</td><td>table</td></tr><tr><td>Table</td><td>Table Comments</td><td>Source Description</td><td>Descriptions</td><td>Source Description</td></tr><tr><td>Columns</td><td>Column Name</td><td>Column</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns</td><td>Data Type</td><td>Column Type</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns</td><td>Description</td><td>Source Description</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns</td><td>Ordinal Position</td><td>Column Position</td><td>Table Columns</td><td>-</td></tr><tr><td>Columns</td><td>Length</td><td>Data Type Size</td><td>Table Columns</td><td>-</td></tr><tr><td>Views</td><td>View Name</td><td>View</td><td>Tables</td><td>view</td></tr><tr><td>Views</td><td>View_Definition/Definition</td><td>View Query</td><td>Views</td><td>View</td></tr><tr><td>Procedures</td><td>nspname</td><td>Name</td><td>Procedures</td><td>-</td></tr><tr><td>Procedures</td><td>nspname</td><td>Source Description</td><td>Descriptions</td><td>-</td></tr><tr><td>Procedures</td><td>Prosrc</td><td>Procedure</td><td>Procedures</td><td>-</td></tr><tr><td>Functions</td><td>nspname</td><td>Name</td><td>Functions</td><td>-</td></tr><tr><td>Functions</td><td>Function_Definition</td><td>Function</td><td>Functions</td><td>-</td></tr><tr><td>Functions</td><td>Description</td><td>Source Description</td><td>Descriptions</td><td>-</td></tr><tr><td>Triggers</td><td>Trigger Name</td><td>Name</td><td>Triggers</td><td>-</td></tr><tr><td>Triggers</td><td>action_statement</td><td>Trigger Data</td><td>Triggers</td><td>-</td></tr></tbody></table>

## Set up a **Connection**

### **Prerequisites**

The following are the prerequisites to establish a connection:

#### **Whitelisting Ports**

Make sure that the inbound port “5432” is whitelisted to enable successful connectivity with the PostgreSQL database.

{% hint style="warning" %}
*The default port number for PostgreSQL is 5432. If a different port is used, ensure that the updated port number is specified during connection setup, the port is whitelisted, and communication between the system and PostgreSQL is properly established.*
{% endhint %}

### **Service Account User Permissions**

{% hint style="warning" %}
It is recommended to use a separate service account to establish the connection to the data source, configured with the following minimum set of permissions.
{% endhint %}

{% hint style="info" %}
**👨‍💻Who can provide these permissions?** These permissions are typically granted by the PostgreSQL administrator, as users may not have the required access to assign them independently.
{% endhint %}

<table data-search="false"><thead><tr><th width="172">Operations</th><th>Objects</th><th width="284">System Tables</th><th width="190">Access Permission</th></tr></thead><tbody><tr><td>Crawling &#x26; Profiling</td><td>Schemas</td><td><code>information_schema.schemata</code></td><td><strong>USAGE</strong></td></tr><tr><td>Crawling &#x26; Profiling</td><td>Tables</td><td><code>information_schema.tables</code>, <code>pg_matviews</code></td><td><strong>SELECT</strong></td></tr><tr><td>Crawling &#x26; Profiling</td><td>Table Columns</td><td><code>pg_attribute</code>, <code>pg_class</code>, <code>pg_namespace</code>, <code>information_schema.columns</code></td><td><strong>SELECT</strong></td></tr><tr><td>Crawling, Profiling &#x26; Lineage Building</td><td>Views</td><td><code>information_schema.views</code>, <code>pg_matviews</code></td><td><strong>SELECT</strong></td></tr><tr><td>Crawling &#x26; Lineage Building</td><td>Functions</td><td><code>pg_proc</code>, <code>pg_namespace</code>, <code>pg_language</code>, <code>pg_type</code></td><td><strong>EXECUTE</strong></td></tr><tr><td>Crawling &#x26; Lineage Building</td><td>Stored Procedures</td><td><code>pg_proc</code>, <code>pg_namespace</code>, <code>pg_language</code>, <code>pg_type</code></td><td><strong>EXECUTE</strong></td></tr><tr><td>Crawling</td><td>Triggers</td><td><code>information_schema.triggers</code></td><td><strong>EXECUTE</strong></td></tr><tr><td>Crawling</td><td>Relationships</td><td><code>information_schema.referential_constraints</code>, <code>information_schema.key_column_usage</code></td><td><strong>REFERENCES</strong></td></tr></tbody></table>

### Connection Configuration Steps

{% hint style="warning" %}
***Important**: You must have the Connector Creator role to set up a connection in OvalEdge.*
{% endhint %}

1. Log into OvalEdge, go to **Administration > Connectors**, click **+ (New Connector)**, search for **PostgreSQL**, and complete the required parameters.

{% hint style="success" %}
*Fields marked with an asterisk (**\***) are mandatory for establishing a connection.*
{% endhint %}

<table><thead><tr><th width="222.75">Field Name</th><th>Description</th></tr></thead><tbody><tr><td>Connector Type</td><td>By default, "PostgreSQL" is displayed as the selected connector type.</td></tr><tr><td>Credential Manager*</td><td><p>Select the desired credentials manager from the drop-down list. Relevant parameters will be displayed based on your selection.</p><p>Supported Credential Managers:</p><ul><li>OE Credential Manager</li><li>AWS Secrets Manager</li><li>HashiCorp Vault</li><li>Azure Key Vault</li></ul><p>For more details, click <a href="https://docs.ovaledge.com/connectors/additional-requirements/credential-manager-configuration">here</a>.</p></td></tr><tr><td>License Add Ons</td><td><ul><li>Select the checkbox for Auto Lineage Add-On to build data lineage automatically.</li><li>Select the checkbox for Data Quality Add-On to identify data quality issues using data quality rules and anomaly detection.</li></ul><p>For more details, click <a href="https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/license-types-and-add-ons">here</a>.</p></td></tr><tr><td>Connector Name*</td><td>Enter a unique name for the PostgreSQL connection.</td></tr><tr><td>Connector Environment</td><td>Select the environment (Example: PROD, STG) configured for the connector.<br>For more details, click <a href="https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/prerequisites#connector-environment">here</a>.</td></tr><tr><td>Connector Description</td><td>Enter a brief description of the connector.</td></tr><tr><td>Server*</td><td>Enter the PostgreSQL database server name or IP address. (Example: xxxx-xxxxxxx.xxxx4ijtzasl.xx-south-1.rds.amazonaws.com or 1xx.xxx.1.xx).</td></tr><tr><td>Port*</td><td>By default, the port number for PostgreSQL, 5432, is auto-populated. If required, you can change it to a custom port number configured for your PostgreSQL.</td></tr><tr><td>Database*</td><td>Enter the database name to which the service account user has access within the PostgreSQL.</td></tr><tr><td>Driver*</td><td>By default, the PostgreSQL driver details are auto-populated.</td></tr><tr><td>Username*</td><td>Enter the service account username configured to access the PostgreSQL database (example: "oesauser").</td></tr><tr><td>Password*</td><td>Enter the password associated with the service account user.</td></tr><tr><td>Connection String</td><td><p>Configure the connection string for the PostgreSQL database:</p><ul><li>Automatic mode: The system generates a connection string based on the provided credentials.</li><li>Manual mode: Enter a valid connection string manually.</li></ul><p>Replace placeholders with actual database details.</p><p>{sid} refers to the database name.</p></td></tr><tr><td>Plugin Server</td><td>Enter the server name when running as a plugin server.</td></tr><tr><td>Plugin Port</td><td>Enter the port number on which the plugin is running.</td></tr></tbody></table>

2. After entering all connection details, the following actions can be performed:
   1. Click **Validate** to verify the connection.
   2. Click **Save** to store the connection for future use.
   3. Click **Save & Configure** to apply additional settings before saving.
3. The saved connection will appear on the Connectors home page.

## Manage Connector Operations

### Crawl/Profile

{% hint style="warning" %}
To perform crawl and profile operations, users must be assigned the Integration Admin role.
{% endhint %}

The **Crawl/Profile** button allows users to select one or more schemas for crawling and profiling.&#x20;

1. Navigate to the Connectors page and click **Crawl/Profile.**
2. Select the schemas to be crawled.
3. The Crawl option is selected by default. To perform both operations, select the **Crawl & Profile** radio button.
4. Click **Run** to collect metadata from the connected source and load it into the **Data Catalog.**
5. After a successful crawl, the information appears in the **Data Catalog > Databases** tab.

The **Schedule** checkbox allows automated crawling and profiling at defined intervals, from a minute to a year.

1. Click the **Schedule** checkbox to enable the **Select Period** drop-down.
2. Select a time interval for the operation from the drop-down menu.
3. Click **Schedule** to initiate metadata collection from the connected source.
4. The system will automatically execute the selected operation (**Crawl** or **Crawl & Profile**) at the scheduled time.

#### Other Operations

The Connectors page provides a centralized view of all configured connectors, along with their health status.

**Managing connectors includes:**

* **Connector Health**: Displays the current status of each connector using a green icon for active connections and a red icon for inactive connections, helping to monitor connectivity with data sources.
* **Viewing**: Click the **Eye** icon next to the connector name to view connector details.

**Nine Dots Menu Options:**

You can view, edit, validate, build lineage, modify connector settings, and delete connectors using the **Nine Dots menu.**

* **Edit Connector**: Update and revalidate the data source.
* **Validate Connector**: Check the connection's integrity.
* **Settings**: Modify connector settings.
  * **Crawler**: Configure data extraction.
  * **Profiler**: Customize data profiling rules and methods.
  * **Query Policies:** Define query execution rules based on roles.
  * **Access Instructions**: Add notes on how data can be accessed.
  * **Business Glossary Settings**: Manage term associations at the connector level.
  * **Anomaly Detection Settings**: Configure anomaly detection preferences at the connector level.
  * **Connection Pooling**: Configure database connection pool parameters to optimize database connectivity and resource utilization. For more details, click [here](https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/connector-settings#connection-pooling).
  * **Others**: Configure notification recipients for metadata changes.
* **Build Lineage**: Automatically build data lineage using source code parsing.
* **Delete Connector**: Remove a connector with confirmation.

For more details on connector settings, click [here](https://docs.ovaledge.com/connectors/introduction-to-connectors/setup-and-connectivity/connector-settings).

## **Troubleshooting**

If incorrect parameters are provided, you may encounter error messages. To resolve these issues, ensure all input is correct. If problems persist, contact your assigned **OvalEdge** support team.

{% tabs %}
{% tab title="Connectivity" %}

<table data-search="true"><thead><tr><th width="85">S. No</th><th width="198">Error Message</th><th width="617">Error Description &#x26; Resolution</th></tr></thead><tbody><tr><td>1</td><td>password authentication failed</td><td><p>The service account password entered during connection setup does not match the password configured on the PostgreSQL source system.</p><p><strong>Resolution:</strong></p><ul><li>Confirm the correct password for the service account with the database administrator.</li><li>Re-enter the password in the connection setup form and revalidate.</li><li>If a credential manager (HashiCorp, AWS Secret Manager, or Azure Key Vault) is being used, confirm the correct key name is mapped, since an incorrect or missing key will cause the raw value to be used as the password instead of the intended secret.</li></ul></td></tr><tr><td>2</td><td>Connection validation fails immediately, before any schema or table information is retrieved</td><td><p>The service account does not have connect permission on the target database. This permission is checked first during validation, so validation stops at this point regardless of other permissions being correctly assigned.</p><p><strong>Resolution</strong>:</p><ul><li>Grant connect permission on the database entered in the connection form.</li><li>Run the required GRANT statement on the source system.</li><li>Revalidate the connection.</li></ul></td></tr><tr><td>3</td><td>Exception occured while validating the PostgreSql Connection : Failed to obtain JDBC Connection; nested exception is xxx.postgresql.xxx.PSQLException: FATAL: database "xxxxx" does not exist</td><td><p></p><p></p><p>The database name provided is invalid.</p><p></p><p><strong>Resolution</strong>:</p><ul><li>You provided an incorrect database name in the setup form's Database Name field.</li><li>Ensure that the database name is correctly spelled and exists in the target system.</li></ul></td></tr></tbody></table>
{% endtab %}

{% tab title="Crawling" %}

<table data-search="true"><thead><tr><th width="86">S. No</th><th width="192">Error Message</th><th width="616">Error Description &#x26; Resolution</th></tr></thead><tbody><tr><td>1</td><td>Tables, views, procedures, or functions expected in the catalog do not appear after a successful crawl</td><td><p>The required metadata type may not be selected in Crawler Options, the object may be excluded by a Crawler Rule, or the required permissions may be missing.</p><p><strong>Resolution:</strong></p><ul><li>Verify that the required metadata type is selected under Crawler Options.</li><li>Check the Include and Exclude Regex fields under Crawler Rules to ensure the required object is not filtered out.</li><li>Review the regex configured for the relevant schema, table, view, column, procedure, or function.</li><li>Verify that the required permissions are available for the object.</li></ul></td></tr><tr><td>2</td><td>Previously cataloged tables or columns now display as deleted or inactive</td><td><p>This occurs when a permission that was previously granted to the service account (such as SELECT on a table) has since been revoked, or the underlying object has been removed on the source system after an earlier successful crawl.</p><p><strong>Resolution:</strong></p><ul><li>Confirm with the database administrator whether the relevant permission was intentionally revoked or the object was removed.</li><li>Reinstate the required permission on the source system if continued access to that object is expected.</li><li>Re-run the crawl once permissions are restored to refresh the object status.</li></ul></td></tr><tr><td>3</td><td>Primary key and foreign key relationships are not appearing between tables, even though the tables themselves are cataloged correctly</td><td><p>This is caused by the references permission on the tables not being granted to the service account. This specific permission controls whether relationship information (primary key and foreign key constraints) can be retrieved, separately from select permission on the tables themselves.</p><p><strong>Resolution:</strong></p><ul><li>Confirm references permission has been granted on the relevant tables in addition to select permission.</li><li>Apply the required grant statement on the source system for the affected tables.</li><li>Re-run the crawl and confirm relationship information now appears against the affected tables.</li></ul></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

## FAQs

{% tabs %}
{% tab title="Connectivity" %}

<table data-search="true"><thead><tr><th width="88">S. No.</th><th width="156">Question</th><th width="614">Answer</th></tr></thead><tbody><tr><td>1</td><td>Which versions of PostgreSQL are supported?</td><td><p>Versions from 6.0 onward are technically compatible, since the underlying connector logic was originally built against version 7.2 and continues to work with older releases.</p><p>Active support is maintained for versions 14 through 18/19:</p><ul><li>These are the versions currently maintained and patched by PostgreSQL</li><li>Versions below 14 are considered legacy on the PostgreSQL side and no longer receive official patches</li><li>Connectivity may still work for older versions, but they fall outside the actively tested range</li></ul></td></tr><tr><td>2</td><td>What is the default port, and what should be checked before setup?</td><td><p>The default port used for PostgreSQL connections is 5432.Before setting up the connection, the following should be checked:</p><ul><li>Firewall or security group rules allow traffic on this port between the application and the database server</li><li>DNS correctly resolves the server address from the application side</li><li>The application server IP is allow-listed on the PostgreSQL side, since the database administrator may need to permit it explicitly</li><li>The PostgreSQL service itself is running and actively listening on the configured port</li></ul></td></tr></tbody></table>
{% endtab %}

{% tab title="Crawling" %}

<table data-search="true"><thead><tr><th width="87">S. No.</th><th width="175">Question</th><th width="605">Answer</th></tr></thead><tbody><tr><td>1</td><td>What permissions are required on the PostgreSQL source system?</td><td><p>The following permissions must be granted to the service account being used:</p><ul><li><strong>Connect</strong> permission on the target database, required before any other validation can proceed</li><li><strong>Usage</strong> permission on each schema that needs to be visible</li><li><strong>Select</strong> permission on all tables and views that need to be retrieved</li><li><strong>Execute</strong> permission on procedures, functions, and triggers that need to be retrieved</li><li><strong>References</strong> permission on tables where primary key and foreign key relationship information is required</li></ul><p>If any one of these permissions is missing for a specific object, only that particular object is affected. Other objects with correct permissions continue to be retrieved normally.</p></td></tr></tbody></table>
{% endtab %}
{% endtabs %}

***

&#x20;Copyright © 2025, OvalEdge LLC, Peachtree Corners GA USA


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.ovaledge.com/connectors/connector-repositories/rdbms/postgresql.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
