跳至内容

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. 选项中,选择查询参数
  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来实现:
    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中设置全局时区,可通过环境变量(自托管版本)或设置(n8n Cloud版本)进行配置。您还可以在工作流设置中为特定工作流设置时区。
  • 使用ISO 8601格式: ISO 8601格式将月份中的日、月、年、小时、分钟和秒编码为标准化的字符串。n8n在节点之间传递日期时使用字符串格式,并利用Luxon来解析日期。如果需要显式转换为ISO 8601格式,可以使用日期时间节点并将自定义格式设置为字符串yyyy-MM-dd'T'HH:mm:ss
优云智算