--- sidebar_position: 13 description: Connect Appsmith to a PostgreSQL database and create queries. --- # PostgreSQL This page gives information to connect Appsmith to a PostgreSQL database and to read and write data in your applications. ## Connect PostgreSQL :::caution If you are a cloud user, you must configure the `pg_hba.conf` file to whitelist the IP addresses `18.223.74.85` and `3.131.104.27` of the Appsmith deployment on your database instance before connecting to a database. See [**Client Authentication**](https://www.postgresql.org/docs/current/auth-pg-hba-conf.html) for more details. ::: ### Connection parameters The following section is a reference guide that provides a complete description of all the parameters to connect to a PostgreSQL database. #### Connection Mode
Specifies the mode in which the Appsmith application can interact with the database.

Options:
#### Host Address
The network location of the PostgreSQL server that you want to connect. This can be a domain name or an IP address. To connect to a local PostgreSQL database, see Connect Local Database for directions on configuring the connection parameters.
#### Port
The port number to connect to at the server host. Appsmith connects to port 5432 by default if you do not specify one.
#### Database Name
The name of the database you want to connect.
#### Username
The username that you want to use to authenticate with the PostgreSQL server.
#### Password
Password to use if the server demands password authentication.
#### SSL Mode
Determines with what priority a secure SSL TCP/IP connection is negotiated with the server.

Options:
For more information, see SSL Support.
## Query PostgreSQL The following section provides examples of creating basic CRUD queries on PostgreSQL. :::info For the SQL syntax, see the official [**PostgreSQL documentation**](https://www.postgresql.org/docs/12/index.html). ::: ### Fetch data ```sql SELECT * FROM users LIMIT {{ tableUsers.pageSize }} OFFSET {{ tableUsers.pageOffset }}; ``` In the above example, `tableUsers` is the name of the Table widget used to display the data using [**server-side pagination**](/build-apps/how-to-guides/Server-side-pagination-in-table). See how to guide on [Fetch and Filter data in SQL](/connect-data/how-to-guides/fetch-and-filter-data-in-sql). ### Insert data ``` INSERT INTO users (name, gender, email) VALUES ( {{ nameInput.text }}, {{ genderDropdown.selectedOptionValue }}, {{ emailInput.text }} ); ``` In the above example,  `nameInput`,  `genderDropdown`, and `emailInput` are the names of the widgets used to capture input from the user for name, gender and email fields, respectively. See how-to guide on [Insert and Update data in SQL](/connect-data/how-to-guides/insert-and-update-data-in-sql). ### Update data ``` UPDATE users SET email = '{{emailInput.text}}' WHERE id = {{ tableUsers.selectedRow.id}}; ``` In the above example, `emailInput` is the name of the Input widget used to capture the email entered by the user. `tableUsers` is the Table widget where the user selects the row to update the user's email. ### Delete data ``` DELETE FROM users WHERE id = {{tableUsers.selectedRow.id}}; ``` In the above example, `tableUsers` is the name of the Table widget where the user selects the row for deletion. For information on how to delete data in a Table, see [Delete Data in Table](/reference/widgets/table/inline-editing#delete-row). :::info Prepared statements are turned on by default in your queries to help prevent SQL injection attacks. For more details, see [**Prepared Statements**](/connect-data/concepts/how-to-use-prepared-statements). ::: ## Row Level Security (RLS) Row level security is a PostgreSQL security feature the database provides to limit what table rows are visible for querying. It allows the database admins to define security policies to control how the rows of a given table can be accessed or modified. Watch the [**video series**](https://youtu.be/8qPTZQvJ9fA) for details on using RLS on your apps. ## Troubleshooting If you're experiencing difficulties, you can refer to to the [Datasource troubleshooting guide](/help-and-support/troubleshooting-guide/application-errors), or contact the support team using the chat widget at the bottom right of this page. ## See also - [Fetch and Filter Data in SQL](/connect-data/how-to-guides/fetch-and-filter-data-in-sql) - Learn how to fetch and filter data from SQL databases using queries. - [Insert and Update Data in SQL](/connect-data/how-to-guides/insert-and-update-data-in-sql) - Step-by-step guide on inserting new records and updating existing data in SQL databases. - [Update Data](/build-apps/how-to-guides/submit-form-data) - Understand how to update data in your application using Form widget. - [Insert Data](/build-apps/how-to-guides/insert-data) - Step-by-step instructions on inserting new records into your database using Form widget.