Postgres 节点常见问题#
以下是 Postgres 节点 的一些常见错误和问题以及解决或排除故障的步骤。
使用参数动态填充 SQL IN
组#
在 Postgres 中,您可以使用 SQL IN
比较构造在值组之间进行比较:
1 |
|
虽然您可以在查询中使用 n8n 表达式动态填充 IN
组中的值,但将其与查询参数结合使用可通过自动清理输入提供额外保护。
要使用查询参数构造 IN
组查询:
- 将Operation 操作设置为Execute Query 执行查询。
- 在Options 选项中,选择Query Parameters 查询参数。
- 使用表达式从输入数据中选择数组。例如,
{{ $json.input_shirt_sizes }}
。 - 在Query 查询参数中,用空括号编写带有
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,可以使用Date & Time 日期和时间节点和设置为字符串
yyyy-MM-dd'T'HH:mm:ss
的自定义格式。