Connecting n8n to databases like PostgreSQL and MySQL opens up a world of automation possibilities, allowing you to seamlessly integrate your workflows with the core data repositories that power many applications. Whether you need to read customer information, log events, update records based on external triggers, or migrate data between systems, n8n’s dedicated database nodes provide a straightforward way to interact with your SQL databases without writing complex code. This capability is essential for building robust automation that relies on dynamic data stored in traditional relational databases.
Why Connect n8n to Databases?
Think of your database as a massive, super-organized filing cabinet holding all sorts of important information. Your n8n workflow is like an office assistant that needs specific files from that cabinet (reading data) or needs to put new files in, update existing ones, or even get rid of old ones (writing/updating/deleting data). Connecting n8n to your database is simply giving that assistant the key and instructions to access and manage those files automatically.
Why would you want to do this? Well, maybe you get new lead data from a form submission (like a webhook) and want to immediately add it to your customer database. Or perhaps you need to pull product inventory levels from your database before sending out an order confirmation email. Automating these database interactions saves you time, reduces errors, and ensures your systems stay synchronized. It’s a game-changer for data-driven processes.
How n8n Interacts: Workflow Nodes vs. Backend Storage
Now, before we dive into the how, let’s quickly clear up a common point of confusion, especially if you’ve explored n8n’s hosting documentation. n8n uses a database internally to store its own information – things like your workflows, credentials, and execution logs. By default, it uses SQLite, but for self-hosted versions, you can configure it to use PostgreSQL (and historically, MySQL, although that changed with v1.0). This is about n8n’s internal mechanics.
What we’re talking about in this article is using n8n’s workflow nodes to connect to your separate, external databases where your application or business data lives. These are two different things, although they both involve database connections. So, even if n8n itself is running on SQLite, you can absolutely connect a workflow node to a PostgreSQL or MySQL database elsewhere!
Connecting Databases with n8n Nodes
Connecting to a database within an n8n workflow is surprisingly simple. You’ll primarily use the dedicated database nodes available in the n8n editor. n8n supports many popular databases right out of the box, thanks to built-in nodes.
Supported Database Types
You’ll find nodes for several relational databases. The most common ones you’ll encounter and likely need are:
- Postgres: A powerful, open-source object-relational database system.
- MySQL: Another very popular open-source relational database management system (often used with MariaDB).
- Microsoft SQL: Microsoft’s relational database system.
- MongoDB: While not relational, it’s a very common NoSQL database, and n8n has a dedicated node for it too!
The process is quite similar for all these relational database nodes (Postgres, MySQL, MSSQL), usually just differing slightly in the specific credential fields required.
Setting Up Database Credentials
This is the essential first step. You need to tell n8n how to access your database. N8n handles this securely using Credentials.
- In the n8n editor, click “Credentials” in the left sidebar.
- Click “New Credential”.
- Search for your database type (e.g., “Postgres”, “MySQL”).
- Select the appropriate credential type.
- Fill in the required details:
- Host: The server address where your database lives (e.g.,
localhost
, an IP address, or a hostname). - Port: The standard port for your database (e.g., 5432 for Postgres, 3306 for MySQL).
- Database: The specific database name you want to connect to.
- User: The database username.
- Password: The password for that user.
- (Optional) SSL Options: If your database requires a secure connection, you’ll configure this here.
- Host: The server address where your database lives (e.g.,
Always give your credential a descriptive name so you know exactly which database it connects to later! Once saved, these credentials are encrypted and stored securely within n8n.
Performing Database Operations
Once your credential is set up, you can add the corresponding database node to your workflow (e.g., the “Postgres” node or “MySQL” node). In the node’s configuration, you’ll select the credential you just created.
Each database node typically offers several Operations:
Operation | Description | Common Use Cases |
---|---|---|
Execute |
Run a custom SQL query (SELECT, INSERT, UPDATE, DELETE, etc.). | Complex queries, joins, specific data manipulation. |
Select |
Retrieve records from a table. | Get customer details, fetch product list. |
Insert |
Add new records to a table. | Log events, add new sign-ups. |
Update |
Modify existing records in a table. | Change order status, update user profile. |
Delete |
Remove records from a table. | Clean up old data, remove canceled accounts. |
Using Execute
is the most flexible, allowing you to write any valid SQL query. The other operations provide a more guided interface for common tasks.
Example: Fetching User Data
Let’s say you want to fetch user emails from a users
table in a PostgreSQL database.
- Add a “Postgres” node to your workflow.
- In the node settings, select the Postgres credential you created.
- Choose the
Select
operation. - Specify the
Table Name
asusers
. - You might add a
Filter
if you only want specific users (e.g.,id > 100
). - Under
Columns
, you could specifyemail
if you only need that column. - Execute the node. The output will be a list of items, each representing a row from the
users
table with the selected data.
Example: Logging Data
Imagine a webhook receives feedback submissions, and you want to save them to a feedback
table in a MySQL database.
- Start with a “Webhook” trigger node.
- Add a “MySQL” node.
- Select your MySQL credential.
- Choose the
Insert
operation. - Set the
Table Name
tofeedback
. - In the
Columns
section, you’ll map the data from the webhook input to the columns in yourfeedback
table. For instance, if the webhook provides{ "email": "...", "message": "..." }
, you’d map the webhook’semail
property to youremail
column and the webhook’smessage
property to yourfeedback_text
column (using expressions like{{$json["email"]}}
and{{$json["message"]}}
). - When the webhook receives data, the MySQL node will automatically insert a new row.
Tips for Working with Databases in n8n
- Data Structure is Key: Understand the schema of your database tables. What are the column names? What data types do they expect? This is crucial for correctly mapping data in your n8n nodes.
- Transform Data Before Inserting/Updating: Often, data coming into n8n from one source won’t exactly match the format your database expects. Use nodes like
Set
,Rename Keys
, orCode
to transform the data into the correct structure before sending it to the database node. - Handle Errors Gracefully: Database operations can fail (e.g., connection issues, permission problems, data type mismatches). Add error handling branches to your workflow to catch these issues and perhaps send yourself a notification or log the error elsewhere.
- Be Mindful of Performance: While n8n nodes manage connections, performing many individual database operations in a loop can be slow. If you have many items to insert or update, check if the database node supports batch operations. (The community discussion mentioned connection pooling being a potential area for improvement in n8n’s core, but for workflow nodes, focus on efficient operations).
- Security First: Never hardcode database credentials directly in node settings or expressions. Always use the secure Credentials feature in n8n. Ensure the database user you connect with has only the necessary permissions (e.g., don’t give
ALL PRIVILEGES
if the workflow only needs to read data).
Common Challenges and Solutions
One hurdle I’ve seen people face is permission issues. They set up the credential, but the workflow fails. Double-check that the database user you’re connecting with has the specific permissions required for the operations you’re trying to perform on the target table(s). Can they SELECT? Can they INSERT? Your database administrator is your best friend here.
Another challenge can be connection details – ensuring the host, port, database name, user, and password are exactly right. Even a small typo will prevent a connection. Testing the connection within the n8n credential setup dialog is always a good practice.
Wrapping Up
Connecting n8n to your databases like PostgreSQL and MySQL isn’t just a technical task; it’s about unlocking the value held within your data. By making your database accessible to your automated workflows, you can build powerful, responsive processes that react to events, keep data consistent, and automate manual data entry or retrieval. It might seem a bit intimidating at first, but with n8n’s intuitive nodes and secure credential management, you’ll be querying and manipulating your database data in your automations in no time. So, go ahead, give it a shot – your data is waiting to be put to work!