Ansible...SQLParseError:PostgreSQL不支持超过3个点的表

nkkqxpd9  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(146)

我正在编辑和扩展由第三部分构建的ansible剧本。
我添加了一个在DB上运行查询并将数据转储到csv文件中的任务:

- name: run query1 and dump data in csv
      community.postgresql.postgresql_copy:
        login_host: '{{ db_host }}'
        login_user: '{{ db_username }}'
        login_password: '{{ db_password }}'
        db: '{{ db_database }}'
        port: '{{ db_database_port }}'
        src: "{{ lookup('template', 'query1.sql.j2') }}"
        copy_to: "{{ log_base_path }}/results1.csv"
        options:
          format: csv
          delimiter: ';'
          header: yes

query1.sql.j2的含量为

SELECT
    KEY,
    idint,
    barcode,
    systemLV1,
    systemLV2,
    n.attribute1 AS attribute1_master,
    c.attribute1 AS attribute1_systemLV2,
    n.attribute2 AS attribute2_master,
    c.attribute2 AS attribute2_systemLV2,
    n.attribute3   AS attribute3_master,
    c.attribute3   AS attribute3_systemLV2,
    n.attribute1 = c.attribute1 AS check_attribute1_systemLV2,
    n.attribute2 = c.attribute2 AS check_attribute2_systemLV2,
    n.attribute3   = c.attribute3   AS check_attribute3_systemLV2

FROM 
    check_items_stechsystem2_ctrl2 c LEFT JOIN check_items_stechsystem1_ctrl2 n USING (KEY, idint, barcode, systemLV1) 
WHERE 
    (c.attribute1,c.attribute2,c.attribute3) != (n.attribute1,n.attribute2,n.attribute3);

运行此任务时,将引发以下错误:

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible_collections.community.postgresql.plugins.module_utils.database.SQLParseError: PostgreSQL does not support table with more than 3 dots

  localhost failed | msg: MODULE FAILURE

See stdout/stderr for the exact error

这是什么意思?
在互联网上,我几乎找不到关于这个错误的信息。
我读到in this issue page,这个错误与一些非ASCII字符有关。如果是,我应该在哪里查找破坏我的剧本的非ASCII字符?
查询中的两个表都具有以下结构:

Column  |   Type   | Collation | Nullable | Default 

---------+----------+-----------+----------+---------

key     | text     |           | not null | 

idint   | text     |           |          | 

barcode     | text     |           |          | 

systemLV1 | integer  |           |          | 

systemLV2   | text     |           | not null | 

attribute1  | numeric  |           |          | 

attribute2  | smallint |           |          | 

attribute3    | bigint   |           |          |

但是文本类型列被csv文件中包含字符串化数字(最终零填充)数据的列填充。
当我在数据库上手动运行查询时,没有得到任何错误,数据也没有任何奇怪的符号。

z8dt9xmd

z8dt9xmd1#

替换查询中的所有多个空格和新行字符解决了这个问题。
然而,这是非常奇怪的,因为在该剧本中,还有其他任务运行具有新行字符的查询。
由于Traceback表明问题是SQLParseError,我猜当我在一些文本编辑器上格式化查询字符串时,一些“坏的”新行/制表符/空格字符进入了查询字符串。
也有可能我从一些聊天应用程序(如MS Teams)中复制了查询的某些部分,这是一个众所周知的代码剧透。

相关问题