Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql ansible-如何检查将sql文件导入postgres的成功_Postgresql_Ansible_Ansible Playbook - Fatal编程技术网

Postgresql ansible-如何检查将sql文件导入postgres的成功

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

我想在ansible上速成班。。。我遇到了一个需要将文件导入postgres的场景。ansible的postgres模块没有mysql模块所具有的所有命令。。。因此,我必须找到另一种方法来对db运行sql命令

我正在使用shell命令。但是,我不知道如何检查shell命令是否成功

到目前为止,我的剧本是这样的:

- 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'