---
title: PostgreSQL
slug: postgres
image: https://make-cxp-documentation.ams3.cdn.digitaloceanspaces.com/apps-center-icons/PREVIEW_DEFAULT.png
createdAt: 2025-02-03T13:28:13.883Z
---

|   | With the PostgreSQL app in Make, you can run your custom logic directly on your database server through functions. Make loads the interface of input and output parameters dynamically so each parameter can be mapped individually. |
| - | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

# Requirements

To use the PostgreSQL app in Make, you must make sure sure the account you're using to connect to your database has read access to `information_schema.routines` and `information_schema.parameters` tables.

Make will make connections to your database from specifc IP addresses. Our servers are set up with valid PTR records so you can restrict access by allowing `%.make.com`.

# Connect PostgreSQL and Make&#x20;

To create the connection:

::::WorkflowBlock
:::WorkflowBlockItem
Log in to your Make account, add a PostgreSQL module to your scenario, and click **Create a connection**.
:::

:::WorkflowBlockItem
Optional: In the ​​**Connection name​​** field, enter a name for the connection.
:::

:::WorkflowBlockItem
Enter information for the following fields:

| **Field**            | **Description**                                                                                        |
| -------------------- | ------------------------------------------------------------------------------------------------------ |
| **Host**             | Enter the PostgreSQL database host.                                                                    |
| **Port**             | Enter the port. This must be a number between 1 and 65535.                                             |
| **Database**         | Enter the PostgreSQL database.                                                                         |
| **User name**        | Enter your user name.                                                                                  |
| **Password**         | Enter your password.                                                                                   |
| **Client Encoding**  | Enter the charset for the connection.                                                                  |
| **Encrypt**          | Select **Yes** or **No**.                                                                              |
| **Keep-Alive**       | Select **Yes**, **No**, or **Empty**. <br />This enables TCP keep-alive to maintain idele connections. |
| **Keep-Alive Delay** | Enter the initial delay in milliseconds for the first TCP keep-alive message.                          |
:::

:::WorkflowBlockItem
Click **Save**.
:::

:::WorkflowBlockItem
If prompted, authenticate your account and confirm access.
:::
::::

You've successfully created the connection and can now use the PostgreSQL app in your scenarios. If you want to make changes to your connection in the future, follow the steps [here](docId\:SO88FM6pkT0G-adKDDfzZ).

# PostgreSQL modules

You can use the following modules to build your scenarios.&#x20;

## Actions

- Delete row(s) from a table
- Execute a function
- Execute a query (advanced)
- Insert row into a table
- Update row(s) in a table

## Searches

- Select row(s) from a table

# Troubleshooting the PostgreSQL app

The **ER\_Lock\_Wait\_Timeout: Lock wait timeout exceeded; try restarting transaction** error occurs when you modify the same data using multiple modules. It is caused by SQL transactions.

When any SQL module is executed, it starts the transaction and the transaction is finished after the scenario is fully executed. If another module tries to access the same data used in another unfinished transaction, then it has to wait until the previous transaction is finished – but it never happens because the first transaction will be finished after the scenario is finished.

To solve this, turn on **Auto-commit**. It finishes (commits) every transaction immediately after the module execution is done.

::::WorkflowBlock
:::WorkflowBlockItem
Open the scenario settings.
:::

:::WorkflowBlockItem
Enable the **Auto commit** checkbox.
:::

:::WorkflowBlockItem
Click **OK** to confirm the settings.

::Image[]{src="https://api.archbee.com/api/optimize/oAyFj2GHlBeBVWF5OAir2/wJmTbp9yPwqgXGa1d9DKr_uuid-6c7fca8f-92b8-55e8-5be0-bd64dc6107e6.gif" size="50" width="438" height="944" position="flex-start" alt="Scenario settings - auto commit" showCaption="false"}
:::
::::

# PostgreSQL resources

- [Postgresql.org - create function](https://www.postgresql.org/docs/current/sql-createfunction.html)

Here is a sample SQL statement that creates a function that inserts the values passed in the three parameters into a table:

```text
CREATE OR REPLACE FUNCTION insert_record_from_Make(_name character varying,_email character varying, _phone character varying)
RETURNS void 
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
INSERT INTO contacts (name, email, phone) VALUES (_name, _email, _phone);
END;
$BODY$;
```

