create type "[% type.schema %]"."[% type.name %]" as (
[% FOREACH field IN type.fields -%]
"[% field.name %]" [% IF field.type.schema %]"[% field.type.schema.name %]".[% END %][% IF field.type.is_builtin; field.type.name; ELSE %]"[% field.type.name %]"[% END %][% IF !field.nullable %] not null[% END %][% IF field.default.size %] default [% field.default %][% END %][% UNLESS loop.last %],[% END %]
[% END -%]
)
[% END -%]
TEMPLATE
$data,
\my$out
) or die$tt->error;
$log->tracef('Type %s definition would be: %s', $type->name, $out);
$out
};
push@pending, do{
$tt->process(
\<<'TEMPLATE',
[% SWITCH type.type -%]
[% CASE 'enum' -%]
comment on type "[% type.schema %]"."[% type.name %]" is '[% type.description | pg_text %]'
[% CASE 'domain' -%]
comment on domain "[% type.schema %]"."[% type.name %]" is '[% type.description | pg_text %]'
[% END -%]
TEMPLATE
$data,
\my$out
) or die$tt->error;
$log->tracef('Type %s description would be: %s', $type->name, $out);
$out
} ifdefined$type->description;
@pending
}
=head2 create_table
Creates a table, assuming that it does not already exist.
create [% IF table.temporary %]temporary [% END %][% IF table.unlogged %]unlogged [% END %]table if not exists "[% table.schema %]"."[% table.name %]" (
[% FOREACH field IN table.fields -%]
"[% field.name %]" [% IF field.type.schema.defined %]"[% field.type.schema %]".[% END %][% IF field.type.is_builtin; field.type.name; ELSE %]"[% field.type.name %]"[% END %][% IF field.attributes.size %] [% field.attributes %][% END %][% IF !field.nullable %] not null[% END %][% IF field.default.size %] default [% field.default %][% END %][% IF table.primary_keys.size > 0 || !loop.last %],[% END %]
[% END -%]
[% IF table.primary_keys.size -%]
primary key ([% FOR pk IN table.primary_keys %]"[% pk %]"[% UNLESS loop.last %], [% END %][% END %])
[% END -%]
)[% IF table.parents.size %] inherits (
[% FOREACH parent IN table.parents -%]
"[% parent.schema %]"."[% parent.name %]"[% UNLESS loop.last %],[% END %]
[% END -%]
)[% END %][% IF table.tablespace %] tablespace "[% table.tablespace %]"[% END %]
TEMPLATE
$data,
\my$out
) or die$tt->error;
$log->tracef('Table %s definition would be: %s', $tbl->name, $out);
$out
};
push@pending, do{
$tt->process(
\<<'TEMPLATE',
comment on table "[% table.schema %]"."[% table.name %]" is '[% table.description | pg_text %]'
TEMPLATE
$data,
\my$out
) or die$tt->error;
$log->tracef('Table %s description would be: %s', $tbl->name, $out);