You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
boundary/internal/db/schema/migrations/oss/postgres/18/04_host.up.sql

62 lines
2.2 KiB

begin;
-- We are adding the name to the base host catalog type. This allows the db
-- to ensure that catalog names are unique in a scope across all subtypes.
alter table host_catalog
add column name wt_name;
alter table host_catalog
add constraint host_catalog_scope_id_name_uq
unique (scope_id, name);
-- Now that we've added the name column to the base type, we copy
-- the name from the static host catalog table into the base table.
update host_catalog
set name = st.name
from
static_host_catalog st
where
host_catalog.public_id = st.public_id and
st.name is not null;
-- Replace the insert_host_catalog_subtype function defined in 0/20_host.up.sql
-- to include the name.
-- insert_host_catalog_subtype() is a before insert trigger
-- function for subtypes of host_catalog
create or replace function insert_host_catalog_subtype()
returns trigger
as $$
begin
insert into host_catalog
(public_id, scope_id, name)
values
(new.public_id, new.scope_id, new.name);
return new;
end;
$$ language plpgsql;
comment on function insert_host_catalog_subtype() is
'insert_host_catalog_subtype() inserts sub type name into the base type host catalog table';
-- Now that we are tracking the name, which is mutable, we need to also
-- update the base table when the subtype tables are updated.
-- update_host_catalog_subtype() is intended to be used as a before update
-- trigger for all host catalog sub types. The purpose is to ensure that the
-- base table for host catalog to contain the updated names for each host catalog
-- in order to enforce uniqueness across all host catalogs, regardless of subtype,
-- in a given scope.
create function update_host_catalog_subtype()
returns trigger
as $$
begin
update host_catalog set name = new.name where public_id = new.public_id and new.name != name;
return new;
end;
$$ language plpgsql;
comment on function update_host_catalog_subtype() is
'update_host_catalog_subtype() will update base host catalog type name column with new values from sub type';
create trigger update_host_catalog_subtype before update on static_host_catalog
for each row execute procedure update_host_catalog_subtype();
commit;