関数特性
言語: PLPGSQL
戻り値: text
スキーマ変更を実行するため slonik により "update functions" 過程で呼び出されます。
declare
p_old alias for $1;
begin
-- sl_table の更新
if p_old = '1.0.2' or p_old = '1.0.5' then
-- Add new column(s) sl_table.tab_relname, sl_table.tab_nspname
execute 'alter table sl_table add column tab_relname name';
execute 'alter table sl_table add column tab_nspname name';
-- データで列を populate します。
update sl_table set
tab_relname = PGC.relname, tab_nspname = PGN.nspname
from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
where sl_table.tab_reloid = PGC.oid
and PGC.relnamespace = PGN.oid;
-- 列に制約を掛けます。
execute 'alter table sl_table alter column tab_relname set NOT NULL';
execute 'alter table sl_table alter column tab_nspname set NOT NULL';
end if;
-- sl_sequence をアップグレードします。
if p_old = '1.0.2' or p_old = '1.0.5' then
-- Add new column(s) sl_sequence.seq_relname, sl_sequence.seq_nspname
execute 'alter table sl_sequence add column seq_relname name';
execute 'alter table sl_sequence add column seq_nspname name';
-- データで列を populate します。
update sl_sequence set
seq_relname = PGC.relname, seq_nspname = PGN.nspname
from pg_catalog.pg_class PGC, pg_catalog.pg_namespace PGN
where sl_sequence.seq_reloid = PGC.oid
and PGC.relnamespace = PGN.oid;
-- データに制約を掛けます。
execute 'alter table sl_sequence alter column seq_relname set NOT NULL';
execute 'alter table sl_sequence alter column seq_nspname set NOT NULL';
end if;
-- ----
-- 1.0.x から 1.1.0 への変更
-- ----
if p_old = '1.0.2' or p_old = '1.0.5' then
-- Add new column sl_node.no_spool for virtual spool nodes
execute 'alter table sl_node add column no_spool boolean';
update sl_node set no_spool = false;
end if;
return p_old;
end;