首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查将sql文件导入postgres的成功与否

如何检查将sql文件导入postgres的成功与否
EN

Stack Overflow用户
提问于 2016-03-02 16:14:33
回答 1查看 2K关注 0票数 0

我正试着在ansible上速成课程..。我遇到了一个场景,我需要将一个文件导入postgres。ansible的postgres模块没有mysql模块所做的所有命令.因此,我不得不找到另一种方法来对数据库运行sql命令。

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

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

代码语言:javascript
复制
- 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

我最终想要做的是,只有在第一个代码块成功后才启动第二个代码块。现在,为了了解条件是如何工作的,我试图在知道sql文件执行情况时,看看是否可以打印消息到屏幕上。

如果出现以下错误消息,它将失败:

代码语言:javascript
复制
TASK [debug] *******************************************************************
fatal: [10.1.1.109]: FAILED! => {"failed": true, "msg": "The conditional check 'result|succeeded' failed. The error was: |failed expects a dictionary\n\nThe error appears to have been in '/etc/ansible/playbooks/dbupdate.yml': line 9, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    - shell: psql -U openser openser < /tmp/file.dmp\n    - debug: msg='all is well'\n      ^ here\n"}

我还在研究条件如何起作用..。所以我的语法可能是错的。但更大的问题是,由于没有原生的ansible / postgresql导入命令,我意识到ansible不可能知道"file.dmp“中的命令确实创建了我的数据库记录.我可以在file.dmp中添加一个select语句来尝试选择我刚刚创建的记录.但我该怎么把这个传给ansible呢?

只是想知道是否有人对我如何完成这样的事情有一些想法。

谢谢。

编辑1

下面是测试"file.dmp“的内容:

代码语言:javascript
复制
INSERT INTO mytable VALUES (DEFAULT, 64, 1, 1, 'test', 0, '^(.*)$', '\1);

编辑2

我要试着做这样的事:

复制(从mytable ( ppid = 64)选择*到CSV的'/tmp/test.csv‘;

在插入语句之后..。然后让ansible检查这个文件(可能使用lineinfile命令),以此向自己证明insert有效。

EN

回答 1

Stack Overflow用户

发布于 2016-03-02 16:49:11

您只需要对结果变量进行寄存器

让你的剧本看起来像这样应该是可行的:

代码语言:javascript
复制
- 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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35752551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档