Postgresql ansible-如何检查将sql文件导入postgres的成功
我想在ansible上速成班。。。我遇到了一个需要将文件导入postgres的场景。ansible的postgres模块没有mysql模块所具有的所有命令。。。因此,我必须找到另一种方法来对db运行sql命令 我正在使用shell命令。但是,我不知道如何检查shell命令是否成功 到目前为止,我的剧本是这样的:Postgresql ansible-如何检查将sql文件导入postgres的成功,postgresql,ansible,ansible-playbook,Postgresql,Ansible,Ansible Playbook,我想在ansible上速成班。。。我遇到了一个需要将文件导入postgres的场景。ansible的postgres模块没有mysql模块所具有的所有命令。。。因此,我必须找到另一种方法来对db运行sql命令 我正在使用shell命令。但是,我不知道如何检查shell命令是否成功 到目前为止,我的剧本是这样的: - hosts: webservers tasks: - block: - debug: msg='Start sql insert play...' - cop
- hosts: webservers
tasks:
- block:
- debug: msg='Start sql insert play...'
- copy: src=file.dmp dest=/tmp/file.dmp
- debug: msg='executing sql file...'
- shell: psql -U widgets widgets < /tmp/file.dmp
- debug: msg='all is well'
when: result|succeeded
rescue:
- debug: msg='Error'
always:
- debug: msg='End of Play'
# - block:
# - name: restart secondarywebservers
# - debug: msg='Attempting to restart secondary servers'
# - hosts: websecondaries
编辑2
我将尝试这样做:
将Select*从ppid=64的mytable复制到带有csv的“/tmp/test.csv”
在insert语句之后。。。然后可能使用LINEINFLE命令对该文件进行可行性检查,以向自己证明插入有效。您只需要输入该结果变量
将您的游戏更改为这样应该可以:
- hosts: webservers
tasks:
- block:
- debug: msg='Start sql insert play...'
- copy: src=file.dmp dest=/tmp/file.dmp
- debug: msg='executing sql file...'
- shell: psql -U widgets widgets < /tmp/file.dmp
register: result
- debug: msg='all is well'
when: result|succeeded
rescue:
- debug: msg='Error'
always:
- debug: msg='End of Play'
您需要注册结果变量,以便在检查中使用它@谢谢。这解决了语法错误。。。但是通过shell命令导入file.dmp文件不会返回结果。这才是我要解决的真正问题。请参阅我的编辑2。psql是一个CLI实用程序。因此,您在捕获退货状态方面受到限制。两个基本选项是检查shell返回代码result.rc或查看stdout以获得正向指示result.stdout。如果您想检查状态,为什么不使用shell模块执行一个查询,即psql-c'从mytable中选择id,其中ppid=64,然后查看结果。我在oracle环境中使用sqlplus和shell模块来处理类似的内容。@Petro026,是的,我们在同一页上。我可以从命令行运行另一个sql命令,或者在file.dmp中包含一些逻辑,以创建一个包含其中结果的输出文件。如果要将文件写入计算机并查找其中的状态,这也可能对您有所帮助。谢谢这回答/修复了我遇到的语法问题。。。但是我想我仍然需要一种方法来证明sql输入文件是合法的/有效的。我将尝试运行一个后续sql select语句,该语句将转储到一个文件。。。然后检查文件是否存在。
INSERT INTO mytable VALUES (DEFAULT, 64, 1, 1, 'test', 0, '^(.*)$', '\1);
- hosts: webservers
tasks:
- block:
- debug: msg='Start sql insert play...'
- copy: src=file.dmp dest=/tmp/file.dmp
- debug: msg='executing sql file...'
- shell: psql -U widgets widgets < /tmp/file.dmp
register: result
- debug: msg='all is well'
when: result|succeeded
rescue:
- debug: msg='Error'
always:
- debug: msg='End of Play'