首页 > 解决方案 > 如何在 Ansible 中使用美元引号创建 SQL 视图?

问题描述

我有一个带有以下代码的 sql 文件:

CREATE OR REPLACE FUNCTION webapp.row_text_mappingtable(webapp.mappingtable) 
RETURNS text AS 
$$
SELECT coalesce($1.table_name::varchar, '') || ' ' ||
        coalesce($1.value::varchar, '') || ' ' ||
        coalesce($1.replacement::varchar, '') || ' ' ||
        coalesce($1.category::varchar, '');
$$
LANGUAGE SQL;

我可以在 psql shell 中轻松运行此代码,但我需要使用 Ansible playbook 使用此脚本执行 view.sql 文件。我在剧本中尝试了以下代码:

---
- name: file copy, move, downloading, etc.
  hosts: 127.0.0.1
  become_user: postgres
  vars:
    project_path:  "{{ ansible_facts.env['PWD'] }}/.."
    db_owner: someowner
    db_password: somepass
    db_name: somedbname
    db_schema: somedbschema
  tasks: 

    - name: Apply sql scripts to create VIEWS in DB in schema "{{db_schema}}"
      community.general.postgresql_query:
        db: web_app_v2
        path_to_script: "/<somepath>/views.sql" 

当我运行这个剧本时 - 我收到以下错误:

致命:[127.0.0.1]:失败!=> {"changed": false, "msg": "无法执行 SQL 'CREATE OR REPLACE FUNCTION webapp.row_text_mappingtable(webapp.mappingtable) \nRETURNS text AS \n$$\nSELECT coalesce($1.table_name::varchar, ' ') || ' ' ||\n coalesce($1.value::varchar, '') || ' ||\n coalesce($1.replacement::varchar, '') || ' ' ||\n coalesce($1.category::varchar, '')' 无:在 "$$\nSELECT coalesce($1.table_name::varchar, '') || 处或附近未终止的美元引号字符串 ' ' ||\n 合并($1.value::varchar, '') || ' ' ||\n 合并($1.replacement::varchar, '') || ' ' ||\n coalesce($1.category::varchar, '')"\nLINE 3: $$\n ^\n, 查询列表: [" 创建或替换函数 webapp.row_text_mappingtable(webapp.mappingtable) \nRETURNS text AS \n$$\nSELECT coalesce($1.table_name::varchar, '') || ' ' ||\n 合并($1.value::varchar, '') || ' ' ||\n 合并($1.replacement::varchar, '') || ' ' ||\n coalesce($1.category::varchar, '')", '\n$$\nLANGUAGE plpgsql', '\n\n']"}

我还尝试将每个美元符号更改为单引号,将内引号更改为双单引号。但这对我不起作用。

请帮我让 Ansible 执行这个脚本。

标签: postgresqlansible

解决方案


您也许可以将community.general.postgresql_dbstate: "restore"和一起使用target: "/<somepath>/views.sql"


推荐阅读