Postgresql psql文件执行与批处理

示例:
    新建一个批处理文件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文件夹下找到需要的错误信息。

猜你喜欢

转载自blog.csdn.net/lygzscnt12/article/details/79745108