/[sql]/pgsql2interbase
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /pgsql2interbase

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Mon Jul 31 06:19:20 2000 UTC (23 years, 8 months ago) by dpavlin
Branch: MAIN
convert PostgreSQL dump file to InterBase format

1 dpavlin 1.1 #!/usr/local/bin/perl -w
2    
3     # PostgreSQL to InterBase dump file converter
4     #
5     # usage:
6     # cat pg_db_name | ./mysql2pgsql > interbase.sql
7     #
8     # Convert PostgresSQL database dump file to something readable by isql !
9    
10     # 2000-08-30 DbP -- Dobrica Pavlinusic <dpavlin@rot13.org>
11     # based on mysql2pgsql
12    
13     $create=0; # inside create table?
14     $table="";
15     $triggers=""; # create triggers
16    
17     while(<>) {
18     chomp;
19    
20     next if (/^\\connect/);
21    
22     if ($create) { # are we inside create table?
23    
24     if (/DEFAULT nextval \( '"([^"]+)_seq"' \)/i) {
25     $trig=$col=$1;
26     $col=~s/(\w+)_([^_]+)/$1.$2/;
27     $triggers.="
28     set term !! ;
29     create trigger ${trig}_trig for $table
30     before insert position 0
31     as begin
32     $col = gen_id(${trig}_gen,1) ;
33     end !!
34     set term ; !!
35     ";
36     s/ DEFAULT nextval \( '"[^"]+"' \)//i;
37     }
38     s/DEFAULT bool/DEFAULT/i;
39    
40     # int(48...) -> int
41     s/\w*int\d+/ int/gi;
42    
43     # bool -> char(1)
44     s/\w*bool/ char(1)/gi;
45    
46     # datetime -> timestamp
47     s/datetime/timestamp/gi;
48    
49     } else { # not inside create table
50    
51     if (/CREATE SEQUENCE "(\w+)_seq" start (\d+)/i) {
52     my ($gen,$start) = ($1,$2);
53     $sql.="create generator ${gen}_gen ;\n";
54     $sql.="set generator ${gen}_gen to $start ;\n";
55     next;
56     }
57    
58     # left-over from create sequnce
59     next if (/^SELECT nextval/i);
60    
61     # you will have to re-write functions manually!
62     if (/^CREATE FUNCTION/i) {
63     print STDERR "functions not supported: $_\n\n";
64     next;
65     }
66    
67     # rule is usually a defined view
68     if (/^CREATE RULE/i) {
69     print STDERR "rules (views...) not supported: $_\n\n";
70     next;
71     }
72     if (/COPY "([^"]+)" FROM stdin/i) {
73     my $table=$1;
74     my $line=<>; chomp $line;
75     while($line ne "\\.") {
76     $sql.="insert into \"$table\" values (";
77     undef @newarr;
78     foreach $var (split(/\t/,$line)) {
79     if ($var eq "\\N") {
80     push @newarr,"null";
81     } elsif ($var=~/^\d+$/ || $var=~/^\d+\.\d+$/) {
82     push @newarr,"$var";
83     } elsif ($var=~/\w{3} (\w{3}) (\d+) (\d\d:\d\d:\d\d) (\d{4})/) {
84     # timestamp
85     push @newarr,"'$2-$1-$4 $3'";
86     } else {
87     push @newarr,"'$var'";
88     }
89     }
90     $sql.=join(",",@newarr).");\n";
91     $line=<>; chomp $line;
92     }
93     next;
94     }
95    
96     if (/(CREATE \w*\s*INDEX "[^"]+" on "[^"]+")[^(]*\(([^\)]+)\)/i) {
97     my ($ind,$col) = ($1,$2);
98     $col=~s/" "[^"]+"/"/g; # nuke ops_name
99     $sql.="$ind ( $col );\n";
100     next;
101     }
102    
103     }
104    
105    
106     $sql.="$_\n";
107    
108     if (/CREATE TABLE "([^"]+)"/i) {
109     $table=$1 if (defined($1));
110     $create++;
111     }
112    
113     while ($sql=~/;/) {
114     ($dosql,$sql)=split(/;/,$sql,2);
115     $dosql.=";"; # nuked by split, put it back!
116     if ("$dosql" ne "") {
117     print "$dosql\n";
118     $create=0;
119     } else {
120     print STDERR "empty sql!\n";
121     }
122     }
123    
124     }
125    
126     print "$sql\n$triggers\n";
127    
128     print "\n";
129    

  ViewVC Help
Powered by ViewVC 1.1.26