2 ###############################################################################
7 mig-init - This will add or recreate tracking tables for the B<mig> toolset to
8 the migration schema specified by the MIGSCHEMA environment variable, in the
9 PostgreSQL database specified by various PG environment variables.
11 In practice, you should invoke 'mig env use schema_name' prior to calling
22 ###############################################################################
27 HOME PGHOST PGPORT PGUSER PGDATABASE MIGSCHEMA
28 MIGBASEWORKDIR MIGBASEGITDIR MIGGITDIR MIGWORKDIR
33 my $mig_bin = "$FindBin::Bin/";
34 use lib "$FindBin::Bin/";
37 pod2usage(-verbose => 2) if $ARGV[0];
39 Mig::die_if_no_env_migschema();
41 if (! Mig::check_for_db_migschema()) {
42 try_to_create_schema();
45 if (! Mig::check_db_migschema_for_migration_tables()) {
46 try_to_init_schema_with_migration_tools();
48 vivicate_mig_tracking_tables();
52 ###############################################################################
54 sub try_to_create_schema {
55 if ($MIGSCHEMA =~ /[^\w_]/) {
56 die "$MIGSCHEMA is not suitable for a schema name in PostgreSQL\n";
58 my $dbh = Mig::db_connect();
59 my $rv = $dbh->do("CREATE SCHEMA $MIGSCHEMA;")
60 || die "Error creating migration schema ($MIGSCHEMA): $!\n";
61 print "Created schema $MIGSCHEMA\n";
62 Mig::db_disconnect($dbh);
65 sub try_to_init_schema_with_migration_tools {
66 Mig::die_if_no_migration_tools();
67 print "Calling migration_tools.init() and .build()\n";
68 my $dbh = Mig::db_connect();
69 my $rv = $dbh->do("SELECT migration_tools.init(" . $dbh->quote($MIGSCHEMA) . ");")
70 || die "Error running migration_tools.init($MIGSCHEMA): $!\n";
71 print "migration_tools.init() finished\n";
72 my $rv2 = $dbh->do("SELECT migration_tools.build(" . $dbh->quote($MIGSCHEMA) . ");")
73 || die "Error running migration_tools.build($MIGSCHEMA): $!\n";
74 print "migration_tools.build() finished\n";
75 Mig::db_disconnect($dbh);
78 sub vivicate_mig_tracking_tables {
79 Mig::die_if_mig_tracking_table_exists();
80 print "Creating table $MIGSCHEMA.tracked_file...\n";
81 my $dbh = Mig::db_connect();
83 CREATE TABLE $MIGSCHEMA.tracked_file (
85 ,base_filename TEXT UNIQUE
90 ,stage_sql_filename TEXT
91 ,map_sql_filename TEXT
92 ,prod_sql_filename TEXT
96 ") || die "Error creating table $MIGSCHEMA.tracked_file: $!\n";
97 Mig::die_if_mig_column_tracking_table_exists();
99 CREATE TABLE $MIGSCHEMA.tracked_column (
111 ") || die "Error creating table $MIGSCHEMA.tracked_column: $!\n";
113 CREATE INDEX ON $MIGSCHEMA.tracked_column(target_table,target_column);
114 ") || die "Error creating index on $MIGSCHEMA.tracked_column: $!\n";
116 CREATE INDEX ON $MIGSCHEMA.tracked_column(base_filename);
117 ") || die "Error creating index on $MIGSCHEMA.tracked_column: $!\n";
118 Mig::db_disconnect($dbh);