java调用pg_dump备份postgre数据库问题
在项目中,用java调用pg_dump进行postgre数据库备份,在本地机上跑,可以正确运行,发布
到其他机器上之后,会在调用外部程序,进行备份的地方卡住,代码如下:
/**备份数据库**/
File workPath=fetchDBInstallPath();//获取数据库的pg_dump工具的目录
if(workPath==null){
return false;
String dbBackupPath=fetchDBBackupPath();
StringBuffer sb=new StringBuffer();
sb.append( cmd /c pg_dump -h 127.0.0.1 -p 5432 -U postgres -F c -b -v
-f ).append(dbBackupPath+ \\ +fileName+ .backup ).append( dbname );
log.info( ********************************************** );
log.info( workPath= +workPath); www.docin.com
log.info( command: +sb.toString());
log.info( ********************************************** );
Process
process=Runtime.getRuntime().exec(sb.toString(),null,workPath);
log.info( ~~~~~~~~~~~~~~~~~~~~~~~~~~~ );
StreamGobbler errorGobbler = new
StreamGobbler(process.getErrorStream(), Error ); //线程,用于输出外部程序的输
出内容,防止阻塞
StreamGobbler outputGobbler = new
StreamGobbler(process.getInputStream(), Output ); //线程,用于输出外部程序的输
出内容,防止阻塞
log.info( +++++++++++++++++++++++++++ );
errorGobbler.start();
outputGobbler.start();
process.waitFor();
if(process.exitValue()!=0){
return false;
} www.docin.com
从部署机器上的日志来看,运行完成了log.info( +++++++++++++++++++++++++++ );
之后,线程没有正确运行,也就是说,应该是外部程序被阻塞了,然后我把命令行中的-v参数
去掉,不让外部程序输出内容,可还是会阴塞,具体日志如下:
2012-10-12 10:23:43.551 INFO] **********************************************
2012-10-12 10:23:43.551 INFO] workPath=C:\Program
Files\hikvision\CMS\database\bin
2012-10-12 10:23:43.551 INFO] command:cmd /c pg_dump -h 127.0.0.1 -p 5432 -U
postgres -F c -b -v -f c:\backup\test.backup 5221cms
2012-10-12 10:23:43.551 INFO] **********************************************
2012-10-12 10:23:43.711 INFO] ~~~~~~~~~~~~~~~~~~~~~~~~~~~
2012-10-12 10:23:43.711 INFO] +++++++++++++++++++++++++++
------最佳解决方案--------------------------------------------------------
在命令前添加一行
www.docin.com
set PGPASSWORD= password
OpenERP(08年5月前称之为TinyERP)是一个ERP/CRM系统。它使用Python语言开发,
数据库
采用开源的
PostgreSQL
,系统以GNU GPL开 源协议发布。
系统提供较灵活的模块架构,常用模块包括:采购管理,销售管理,库存管理,财务管理,货品管理,营销管理,客户关系管理,生产管理,人事管理,服务支持等等。用户可以直接从模块库中选择安装适用模块,或进行模块卸载,升级的管理操作。
数据库
的
备份
有多种分类方式。按照
备份
后的文件类型,可以分为物理
备份
(文件系统级别的
备份
)和逻辑
备份
(
备份
后的文件是sql文件或特定格式的导出文件);按照
备份
过程中是否停止
数据库
服务,可分为冷
备份
(
备份
过程中停止
数据库
服务)和热
备份
(
备份
过程中
数据库
服务开启并可供用户访问);按照
备份
是否是完整的
数据库
,可分为全量
备份
(
备份
是完整的
数据库
)和增量
备份
(
备份
是上一次全量
备份
后
数据库
改变的内容)。
Post
...
psql 和
pg
_
dump
等工具连接
PostgreSQL
数据库
时,通过-W参数,在终端以交互方式输入密码,很多时候,我们希望使用脚本
调用
psql或者
pg
_
dump
做一些自动化的操作,那么此时如何以非交互方式指定密码?
作者:阎书利
pg
quarrel是一个
PostgreSQL
数据库
的
数据库
结构(DDL)比对工具。它会对比两个
数据库
源,并输出一个表示DDL差异的文件。 如果将输出文件运行到目标
数据库
中,它将具有与源
数据库
相同的结构。 主要使用场景是将
数据库
更改部署到测试或生产环境。
pg
quarrel不依赖于另一个工具(如
pg
_
dump
),而是直接连接到
PostgreSQL
服务器,从目录中获取元数据,比较对象并输出将目标
数据库
转换为源
数据库
所需的命令。它拥有过滤器选项:所以,可以比较部分对象。
它可以适用于不同的Pos
我有一个特定的架构来设置
postgresql
.我有一个基于两个
数据库
N和N 1的系统 .
数据库
N可用于只读模式的客户端,
数据库
N 1可用于客户端的修改 . 客户端还可以向系统发送两个命令:"apply"命令:保留对N 1 db进行的所有修改,并且系统的新状态是具有N 1数据和具有相同数据的N 2 db的只读
数据库
.A "reset"命令:删除N 1 db并为用户创建N
数据库
的新副本以进行写入访...
背景身为一枚主要做后端的程序员,跟
数据库
打交道是必不可少的,虽然
数据库
由专门的dba进行负责,技多不压身。于是,把日常对
postgresql
数据库
的日常操作比较频繁的进行记录下来,一是自己找的时候方便,另外也与大家做个分享交流。命令介绍除去写相关的sql工作,工作上用到比较多的就是
数据库
的
备份
与恢复、导表,今天先介绍一下
数据库
的
备份
与恢复。
pg
_
dump
是一个用于
备份
的命令工具,即使当前
数据库
...
最近要用
JAVA
做一个
PostgreSQL
的
备份
功能,没想到遇到一个大坑。在网上搜索,很快就找到一个用
JAVA
的Runtime.getRuntime().exec()执行cmd命令来
备份
的方法。执行代码后发现,没有导出对应的SQL文件。我觉得可能是命令有
问题
,于是我在cmd执行了这条命令,才发现
问题
所在。原来是执行命令后还要输入数据密码的,这就是我说的那个大坑。我马上就想到再用Runtime.ge...
本文转自:http://blog.chinaunix.net/uid-354915-id-3504632.html
一、
pg
_
dump
的用法:
数据库
的导入导出是最常用的功能之一,每种
数据库
都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysql
dump
,而
PostgreSQL
提供的对应工具为
pg
_
dump
和
pg
_restore。