2009年3月24日星期二

[PerlChina] Re: 连postgresql,那个模块好呢

手头有个脚本,目前只能在UNIX系统上跑,因为用了一些shell命令,是用来比较两个文件夹下的文件的,备份原先的文件然後批量生成patch。

用的时候把$dir1改成存放原始文件的目录,$dir2改成经过更改过的文件的存放目录,$diff_dir改成存放备份文件和patch的目录就可
以了,

这个脚本我一般放在邮箱里,随身携带 :)

begin script ==>

#!/usr/bin/perl -W

use strict;
use warnings;

use File::Compare;

my $dir1 = "dir1";
my $dir2 = "dir2";
my $diff_dir = "diff_dir";

my @files = get_file_list($dir1);

foreach my $file (@files) {

if (-f "$dir1/$file") {

my $ret = compare("$dir1/$file", "$dir2/$file");

if ($ret != 0) {

my $file_directory = get_file_directory($file);
my $file_name = get_file_name($file);

if ((-e "$dir2/$file") && (-f "$dir2/$file")) {

if ($ret > 0) {

print "DIFF : $file_directory/$file_name\n";

`mkdir -p $diff_dir/$file_directory`;
`cp $dir1/$file $diff_dir/$file_directory/`;
`diff $dir1/$file $dir2/$file > $diff_dir/$file_directory/
$file_name.diff`;

}elsif ($ret < 0) {

print "ERROR : $file_directory/$file_name\n";

}
}else {

print "DELETE : $file_directory/$file_name\n";

}
}
}
}

@files = ();

@files = get_file_list($dir2);

foreach my $file (@files) {

if (-f "$dir2/$file") {

if ((!(-e "$dir1/$file")) || (-d "$dir1/$file")) {

my $file_directory = get_file_directory($file);
my $file_name = get_file_name($file);

print "ADD : $file_directory/$file_name\n";

}
}
}

sub get_file_list {

my $dir = shift;

my $command = "cd $dir; find ./";

my $command_output = `$command`;

my @files = split(/\n/, $command_output);

return @files;
}

sub get_file_name {

my $file = shift;

my $file_name = "";

if ($file =~ /^.*\/(.*?)$/) {

$file_name = $1;

}else {

$file_name = $file;

}

return $file_name;
}

sub get_file_directory {

my $file = shift;

$file =~ s/^\.\///;

my $file_directory = "";

if ($file =~ /(^.*)\/.*?$/) {

$file_directory = $1;

}else {

$file_directory = "";

}

return $file_directory;
}


end script <==

以前用这个脚本比较过一个Oracle数据库的Schema,不过当初把这个数据库里所有表和view的DDL都存成了一个独立的文件,Oracle里
用getDDL就能在线获取,但是我不知道PostgreSQL里怎么获取。

这个脚本写得太丑了,而且也不跨平台,所以暂时不想给做成模块 :)

On Mar 18, 12:57 pm, Jumping <quzhengp...@gmail.com> wrote:
> 连postgresql,做schema比较,用什么模块好呢?
>
> DBIx::Compare ?
>
> --
> Best Regards,
> Jumping Qu
> ------
> Don't tell me how many enemies we have, but where they are!
> (ADV:Perl -- It's like Java, only it lets you deliver on time and under
> budget.)
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

没有评论: