You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible的postgresql_query中传入列表变量作为JSON类型?

解决PostgreSQL JSON列插入的Ansible语法错误

错误原因

你用'{{ contacts }}'传递列表变量时,Ansible会把列表渲染成带单引号的字符串(例如'["test@gmail.com", "test2@gmail.com"]'),而PostgreSQL的json类型要求值是无外层单引号的合法JSON格式,这种带单引号的字符串会被判定为无效JSON,触发语法错误。

修复方案

方案1:直接传递原生列表变量

postgresql_query模块支持直接传入Python原生列表/字典类型,会自动将其序列化为符合PostgreSQL要求的JSON格式,不需要手动添加引号:

- name: Insert to db
  postgresql_query:
    db: xxx
    login_user: xxx
    login_password: xxx
    query: INSERT INTO test_table (id, contacts) VALUES (%s, %s)
    positional_args:
    - 1
    - "{{ contacts }}"  # 移除外层单引号

方案2:使用to_json过滤器显式转换(可选)

如果需要确保变量被严格序列化为JSON字符串,可以用Ansible的to_json过滤器,同样不需要加单引号:

- name: Insert to db
  postgresql_query:
    db: xxx
    login_user: xxx
    login_password: xxx
    query: INSERT INTO test_table (id, contacts) VALUES (%s, %s)
    positional_args:
    - 1
    - "{{ contacts | to_json }}"

验证逻辑

执行上述代码后,模块会自动将列表["test@gmail.com", "test2@gmail.com"]转换为PostgreSQL可识别的JSON值,插入到contacts列中,不会再出现引号相关的语法错误。

内容的提问来源于stack exchange,提问作者SNR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:48:15