关闭

Postgresql psql文件执行与批处理

标签: Postgresqlpsql批处理文件调用
2877人阅读 评论(0) 收藏 举报
分类:
示例:
    新建一个批处理文件batch.sql,它包含若干子文件,子文件与批处理文件不在同一目录下,批处理文件在C:\batchexc,子文件在C:\objects内,batch.sql的内容:

\encoding UTF8;
\cd C:/batchexc
\set ON_ERROR_STOP 1
\set ECHO all
\timing on
\i ../objects/platform.sql;
\i ../objects/cities.sql;
\i ../objects/weather.sql;
\i ../objects/one().sql;
\i ../objects/serial.sql;
   其中:
\encoding 设置客户端字符集编码(可选),适用于数据库服务端与客户端字符集编码不一致的情况。
\cd 切换目录。用于将psql的命令执行目录切换到当前文件所在目录。
\set ON_ERROR_STOP 设置变量ON_ERROR_STOP(可选),当脚本执行出现错误时自动终止。不设则默认继续执行。
\set ECHO all 设置变量ECHO(可选),用于将每一步的执行脚本都显示到标准输出。
\timing on 打开计时功能(可选),计算脚本每一步执行的耗时
\i  执行脚本文件。目录在psql中都是反斜杠(/),相对路径的上级目录用(..)表示。

    调用batch.sql,方法有二:

    方法一:外部命令调用

    psql -U postgres -d mydb -f C:\batchexc\batch.sql -L D:\batch.log

    -U 连接用户 -d 连接数据库 -f 执行脚本 -L 日志文件

    -L 日志文件只记录所有查询的输出结果,内容不是很详细。

    所以可以替换上一种写法为:

    psql -U postgres -d mydb -f C:\batchexc\batch.sql > D:\batch.log

    用“>”替代“-L”,日志文件记录了脚本执行较详细的信息。但错误信息不包括在内,需从cmd的输出界面中获得。

    方法二:元命令调用(此方法需先通过psql登录数据库)
    mydb=# \o D:/batch.log
    mydb=# \i C:/batchexc/batch.sql
    反斜杠(\)开头的代表psql的元命令。\o 表示将后面的查询结果保存到指定的文件中。\i 调用执行文件

    Note:无论调用psql的元命令或外部命令,目前我都没有找到方法可以将错误信息写入日志文件。如果有谁知道,请分享一下。
    这里介绍一个替代的方法:在Postgresql服务器端,安装目录\data目录下,有一个pg_log文件夹,里面保存有PG数据库的错误日志,日志文件一般按天创建,文件命名类似:postgresql-2015-07-09_083104.log,可以在pg_log文件夹下找到需要的错误信息。

3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2893次
    • 积分:41
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档