Internal supports the latest versions of PostgreSQL 11 and 12.

How to connect

  • Display Name: Give your data source a name for use within Internal. 
  • Host: The hostname or IP address of your data source. 
  • Port: Port to connect to. By default, this is prefilled with standard values (PostgreSQL:5432).  
  • Username: Credentials for this data source.
  • Password: Credentials for this data source.
  • Database: The name of the database (this must match the actual name of your PostgreSQL database). 
Note: To connect with Internal, your data source must be publicly accessible, with SSL encryption enabled, and configured to accept connections from Internal’s IP addresses. 

What happens when you connect

When you connect PostgreSQL to Internal, we'll generate the following for you automatically:

  1. A list, insert, update, and delete function for each table in the database (if the connecting user account has these privileges). List functions read data from your tables and allow you to display that data in components - think of these as prebuilt SQL queries, so you don't have to write queries for everything.

Note: Functions will not be generated if no primary keys are found in the connected database.

Custom Functions

In some cases, you may want to create a view that combines data from various tables or elevates nested JSON fields to top-level attributes. To accomplish this, create a custom SQL Resource (a.k.a. SQL Query). To enable custom operations that write directly to your database (e.g. bulk actions), create a custom Function.

Filtering and Sorting

While Internal enables filtering and sorting on all columns, we recommend indexing columns on large tables to improve performance.


Internal requires SELECT permissions in the pg_catalog schema in order to load your database schema information. We currently use the following tables:

  • pg_attrdef
  • pg_attribute
  • pg_class
  • pg_constraint
  • pg_depend
  • pg_namespace
  • pg_roles