Skip to content

Postgres 节点常见问题#

以下是 Postgres 节点 的一些常见错误和问题以及解决或排除故障的步骤。

使用参数动态填充 SQL IN#

在 Postgres 中,您可以使用 SQL IN 比较构造在值组之间进行比较:

1
SELECT color, shirt_size FROM shirts WHERE shirt_size IN ('small', 'medium', 'large');

虽然您可以在查询中使用 n8n 表达式动态填充 IN 组中的值,但将其与查询参数结合使用可通过自动清理输入提供额外保护。

要使用查询参数构造 IN 组查询:

  1. Operation 操作设置为Execute Query 执行查询
  2. Options 选项中,选择Query Parameters 查询参数
  3. 使用表达式从输入数据中选择数组。例如,{{ $json.input_shirt_sizes }}
  4. Query 查询参数中,用空括号编写带有 IN 构造的查询。例如:
    1
    SELECT color, shirt_size FROM shirts WHERE shirt_size IN ();
    
  5. 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 的自定义格式。