#close( INPUT );
-my $addprefix = "ALTER EXTENSION $extname ADD";
+sub add_if_not_exists
+{
+ my $obj = shift;
+ print <<"EOF"
+DO \$\$
+BEGIN
+ ALTER EXTENSION $extname ADD $obj;
+ RAISE NOTICE 'newly registered $obj';
+EXCEPTION WHEN object_not_in_prerequisite_state THEN
+ RAISE NOTICE 'already registered $obj';
+END;
+\$\$ LANGUAGE 'plpgsql';
+EOF
+}
my $time = POSIX::strftime("%c", localtime);
print "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n";
print "-- Register all views.\n";
foreach my $view (@views)
{
- print "$addprefix VIEW $view;\n";
+ add_if_not_exists("VIEW $view");
}
print "-- Register all tables.\n";
@tables = reverse(@tables);
foreach my $table (@tables)
{
- print "$addprefix TABLE $table;\n";
+ add_if_not_exists("TABLE $table");
}
{
if ( $agg =~ /create aggregate\s*([\w\.]+)\s*\(\s*.*basetype = ([\w\.]+)/ism )
{
- print "$addprefix AGGREGATE $1 ($2);\n";
+ add_if_not_exists("AGGREGATE $1 ($2)");
}
elsif ( $agg =~ /create aggregate\s*([\w\.]+)\s*\(\s*([\w,\.\s\[\]]+)\s*\)/ism )
{
- print "$addprefix AGGREGATE $1 ($2);\n";
+ add_if_not_exists("AGGREGATE $1 ($2)");
}
else
{
print "-- Register all operators classes and families.\n";
foreach my $opc (@opcs)
{
- print "$addprefix OPERATOR CLASS $opc;\n";
- print "$addprefix OPERATOR FAMILY $opc;\n";
+ add_if_not_exists("OPERATOR CLASS $opc");
+ add_if_not_exists("OPERATOR FAMILY $opc");
}
print "-- Register all operators.\n";
{
if ($op =~ /create operator ([^(]+)\s*\(.*LEFTARG\s*=\s*(\w+),\s*RIGHTARG\s*=\s*(\w+).*/ism )
{
- print "$addprefix OPERATOR $1 ($2,$3);\n";
+ add_if_not_exists("OPERATOR $1 ($2,$3)");
}
else
{
{
if ($cast =~ /create cast\s*\((.+?)\)/i )
{
- print "$addprefix CAST ($1);\n";
+ add_if_not_exists("CAST ($1)");
}
else
{
$fn_arg = strip_default($fn_arg);
if ( ! exists($type_funcs{$fn_nm}) )
{
- print "$addprefix FUNCTION $fn_nm ($fn_arg);\n";
+ add_if_not_exists("FUNCTION $fn_nm ($fn_arg)");
}
else
{
$fn_arg =~ s/DEFAULT [\w']+//ig;
- print "$addprefix FUNCTION $fn_nm ($fn_arg);\n";
+ add_if_not_exists("FUNCTION $fn_nm ($fn_arg)");
}
else
{
print "-- Register all types.\n";
foreach my $type (@types)
{
- print "$addprefix TYPE $type;\n";
+ add_if_not_exists("TYPE $type");
}
#{
# foreach my $schema (@schemas)
# {
-# print "$addprefix SCHEMA \"$schema\";\n";
+# add_if_not_exists("SCHEMA \"$schema\"");
# }
#}