Postgres 节点常见问题#
以下是 Postgres 节点 的一些常见错误和问题以及解决或排除故障的步骤。
使用参数动态填充 SQL IN
组#
在 Postgres 中,您可以使用 SQL IN
比较构造 在值组之间进行比较:
1 |
|
虽然您可以在查询中使用 n8n 表达式 来动态填充 IN
组中的值,将其与 查询参数 结合使用可以通过自动清理输入来提供额外的保护。
要使用查询参数构造 IN
组查询:
- 将操作设置为执行查询。
- 在选项中,选择查询参数。
- 使用表达式从输入数据中选择一个数组。例如,
{{ $json.input_shirt_sizes }}
。 - 在查询参数中,使用空括号编写您的
IN
构造查询。例如:1
SELECT color, shirt_size FROM shirts WHERE shirt_size IN ();
- 在
IN
括号内,使用表达式为查询参数数组中的项目数量动态创建基于索引的占位符(如$1
、$2
和$3
)。您可以通过将每个数组索引加一来实现这一点,因为占位符变量是 1 索引的:1
SELECT color, shirt_size FROM shirts WHERE shirt_size IN ({{ $json.input_shirt_sizes.map((i, pos) => "$" + (pos+1)).join(', ') }});
使用这种技术,n8n 会根据数组中的项目数量自动为 IN
值创建正确数量的 预处理语句占位符。
处理时间戳和时区#
为了避免 n8n 和 Postgres 在解释时间戳和时区数据时出现复杂情况,请遵循以下一般提示:
- 在存储和传递日期时使用 UTC:使用 UTC 有助于在不同表示形式和系统之间转换日期时避免时区转换的混乱。
- 设置执行时区:使用 环境变量(适用于自托管)或在 设置(适用于 n8n Cloud)中设置 n8n 的全局时区。您可以在 工作流设置 中设置特定于工作流的时区。
- 使用 ISO 8601 格式:ISO 8601 格式 在标准化字符串中编码日期、月份、年份、小时、分钟和秒数。n8n 在节点之间以字符串形式传递日期,并使用 Luxon 来解析日期。如果您需要明确转换为 ISO 8601,可以使用 日期和时间节点 并将自定义格式设置为字符串
yyyy-MM-dd'T'HH:mm:ss
。
将日期列输出为日期字符串而不是 ISO 日时字符串#
n8n 使用 pg
包 与 Postgres 集成,这影响了 n8n 如何处理来自 Postgres 的日期、时间戳和相关类型。
pg
包默认将 DATE
值解析为 new Date(row_value)
,这会生成遵循 ISO 8601 日时字符串 格式的日期。例如,日期 2025-12-25
可能会根据实例的时区设置生成日时字符串 2025-12-25T23:00:00.000Z
。
要解决这个问题,请使用 Postgres TO_CHAR
函数 在查询时将日期格式化为预期的格式:
1 |
|
这将生成不包含时间或时区组件的日期字符串。继续上面的例子,通过这种转换,日期 2025-12-25
将生成字符串 2025-12-25
。您可以在 pg
包的日期文档 中了解更多信息。
此页面是否
微信
🚀 与作者交流
关注公众号

n8n实战笔记
📚 教程 💡 案例 🔧 技巧
📚 教程 💡 案例 🔧 技巧
添加微信

1对1 专业指导
⚡ 快答 🎯 定制 🚀 支持
⚡ 快答 🎯 定制 🚀 支持