#!/usr/bin/env perl use strict; use warnings; use utf8; #use Smart::Comments; use FindBin; use lib "$FindBin::Bin/../lib"; use OpenResty::Dispatcher; eval { OpenResty::Dispatcher->init(); }; warn $@ if $@; #my $dump_file = 'metamodel.sql'; my $host_suffix = shift || ''; my $backend = $OpenResty::Backend; my $backend_name = $OpenResty::BackendName; my @accounts = $backend->get_all_accounts; ### @accounts #my @tables = qw( #_views _models _columns _feeds _roles _access _general #); if ( ! -d 'metamodel' ) { mkdir 'metamodel' } elsif (glob 'metamodel/*.sql') { system("mv metamodel metamodel.old"); mkdir 'metamodel'; } #system("mv $dump_file $dump_file.old"); my $db = $OpenResty::Config{'backend.database'}; my $user = $OpenResty::Config{'backend.user'}; my $password = $OpenResty::Config{'backend.password'}; my $host = 'localhost'; for my $account ('_global', @accounts) { $backend->set_user($account); my $machine = $backend->has_user($account); if ($backend_name eq 'PgFarm') { $db = $machine; $host = $machine . $host_suffix; } my $sql = <<'_EOC_'; SELECT c.relname FROM pg_catalog.pg_class c JOIN pg_catalog.pg_roles r ON r.oid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind = 'r' AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_catalog.pg_table_is_visible(c.oid) AND c.relname ~ '^_' _EOC_ my $res; eval { $res = $backend->select($sql); }; if ($@) { warn "select pg_catalog failed!!!\n"; warn $@; next } my @tables = map { $_->[0] } @$res; ### @tables #else {dump_res($res); my $tables = join ' ', map { "-t '$account.$_'" } @tables; my $cmd = "pg_dump -iOx -h $host -U $user $tables -f metamodel/$account.sql $db"; #warn $cmd; warn "Dumping account $account to metamodel/$account.sql...\n"; if (system($cmd) != 0) { warn "Failed to dump metamodel from $account\n"; } #system("cat tmp.sql >> $dump_file"); }