postgresql - 如何在 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 执行这个脚本。
解决方案
您也许可以将community.general.postgresql_db与state: "restore"
和一起使用target: "/<somepath>/views.sql"
。
推荐阅读
- node.js - 如何在节点中的函数调用中等待回调?
- ios - 在 UIScrollView 上绘制上边框
- python - Python Pandas - 采样:限制随机选择的项目数量
- python - Cron 作业不会并行执行
- arm - 控制 GPIO 管脚:所有管脚一个类别还是每个管脚一个类别?
- typescript - 如何阻止 TypeScript 编译器报告符号链接模块中的编译错误
- javascript - 区别!!vs 直接检查价值
- google-apps-script - 需要 Google Docs 的脚本来发送自动电子邮件
- javascript - Django如何将查询集转换为json?
- javascript - Firefox 扩展:chrome.system 未定义