n8n数据存储在postgres
n8n数据存储在postgres
postgres 介绍
PostgreSQL(简称 Postgres)作为一款功能强大的开源关系型数据库管理系统,因其高扩展性、标准兼容性和卓越的性能,受到了全球开发者和企业的广泛青睐。Postgres 最初的设计目标是为了解决传统关系型数据库在可扩展性、复杂数据类型支持以及事务处理等方面的局限性。自1986年由加州大学伯克利分校的 POSTGRES 项目起步,经过数十年的持续发展,Postgres 已经从一个学术研究项目成长为企业级应用的首选数据库之一。
与 MySQL、Oracle、SQL Server 等主流数据库相比,Postgres 在许多方面展现出独特的优势。首先,Postgres 完全遵循 ACID 原则,支持多版本并发控制(MVCC),在高并发场景下依然能够保证数据一致性和事务隔离。其次,Postgres 拥有极强的扩展能力,用户可以自定义数据类型、函数、操作符,甚至可以通过插件机制扩展数据库的核心功能。此外,Postgres 对地理空间数据(PostGIS)、JSON、XML 等复杂数据类型的原生支持,使其在大数据、地理信息系统、金融等领域表现出色。
当然,Postgres 也有一些不足之处。例如,在高写入压力和极大规模分布式场景下,Postgres 的原生集群和分片能力相较于某些 NoSQL 数据库(如 MongoDB、Cassandra)略显不足。不过,随着社区的不断发展,相关的扩展和工具(如 Citus、Patroni 等)也在不断完善。总体而言,Postgres 以其开源、稳定、灵活和强大的特性,成为现代应用架构中不可或缺的数据库解决方案。
使用 docker 部署
在 docker hub 中找到 postgres
https://hub.docker.com/_/postgres
创建数据存储目录

使用如下命令启动
docker run -d \
--name pg \
-v /data/postgres:/var/lib/postgresql \
-p 5432:5432 \
-e POSTGRES_USER=root \
-e POSTGRES_PASSWORD=aA123456 \
postgres
挂载目录使用
docker imspect postgres查看
启动报错

应该是挂载目录的版本问题

postgres 17及之前的,挂载 /var/lib/postgresql/data目录,之后的挂载/var/lib/postgresql目录

使用 dbever 连接测试

n8n使用postgres 数据库
文档地址:https://docs.n8n.io/hosting/installation/docker/#using-with-postgresql
主要是在创建 n8n 镜像的时候,通过环境变量指定pg 数据库
docker volume create n8n_data
docker run -it --rm \--name n8n \-p 5678:5678 \-e GENERIC_TIMEZONE="<YOUR_TIMEZONE>" \-e TZ="<YOUR_TIMEZONE>" \-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \-e N8N_RUNNERS_ENABLED=true \-e DB_TYPE=postgresdb \-e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \-e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \-e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \-e DB_POSTGRESDB_USER=<POSTGRES_USER> \-e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \-e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \-v n8n_data:/home/node/.n8n \docker.n8n.io/n8nio/n8n
我们之前启动 n8n 的命令
docker run -d \--name n8n \-p 5678:5678 \-e N8N_SECURE_COOKIE=false \-e NODE_FUNCTION_ALLOW_BUILTIN=* \-e NODE_FUNCTION_ALLOW_EXTERNAL=* \-v n8n_data:/data/n8n \
n8nio/n8n
首先在 pg 数据库中创建 n8n 的 database

选择展示所有的数据库


按照需要进行修改
docker run -d \--name n8n \-p 5678:5678 \-e N8N_SECURE_COOKIE=false \-e NODE_FUNCTION_ALLOW_BUILTIN=* \-e NODE_FUNCTION_ALLOW_EXTERNAL=* \-e DB_TYPE=postgresdb \-e DB_POSTGRESDB_DATABASE=n8n \-e DB_POSTGRESDB_HOST=ip \-e DB_POSTGRESDB_PORT=5432 \-e DB_POSTGRESDB_USER=root \-e DB_POSTGRESDB_PASSWORD=aA123456 \-e N8N_DEFAULT_LOCALE=zh-CN \-v n8n_data:/data/n8n \-v /data/n8n_zh:/usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/dist \
n8nio/n8n
启动成功

登录验证
登录后,创建一个n8n 的流程

包括创建一些凭证之类的
我使用的是腾讯云的 deepseek 能力


尝试触发请求 ai

尝试执行一下

在postgres 中验证

数据库中已经有数据了


