Company options values, portfolio options values migration done
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
BEGIN;
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS platform;
|
||||
|
||||
ALTER TABLE public.portfolio
|
||||
ADD COLUMN IF NOT EXISTS portfolio_reference uuid;
|
||||
|
||||
UPDATE public.portfolio
|
||||
SET portfolio_reference = gen_random_uuid()
|
||||
WHERE portfolio_reference IS NULL;
|
||||
|
||||
ALTER TABLE public.portfolio
|
||||
ALTER COLUMN portfolio_reference SET DEFAULT gen_random_uuid(),
|
||||
ALTER COLUMN portfolio_reference SET NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_portfolio_reference
|
||||
ON public.portfolio (portfolio_reference);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS uq_company_branch_company_branch
|
||||
ON public.company_branch (company_id, branch_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS platform.company_branch_portfolios (
|
||||
company_id smallint NOT NULL,
|
||||
company_branch_id smallint NOT NULL,
|
||||
portfolio_reference uuid NOT NULL,
|
||||
createdon timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT pk_company_branch_portfolios
|
||||
PRIMARY KEY (company_id, company_branch_id, portfolio_reference),
|
||||
CONSTRAINT fk_company_branch_portfolios_branch
|
||||
FOREIGN KEY (company_id, company_branch_id)
|
||||
REFERENCES public.company_branch (company_id, branch_id),
|
||||
CONSTRAINT fk_company_branch_portfolios_portfolio
|
||||
FOREIGN KEY (portfolio_reference)
|
||||
REFERENCES public.portfolio (portfolio_reference)
|
||||
);
|
||||
|
||||
INSERT INTO platform.company_branch_portfolios (
|
||||
company_id,
|
||||
company_branch_id,
|
||||
portfolio_reference,
|
||||
createdon
|
||||
)
|
||||
SELECT
|
||||
p.company_id,
|
||||
p.branch_id,
|
||||
p.portfolio_reference,
|
||||
COALESCE(p.createdon, CURRENT_TIMESTAMP)
|
||||
FROM public.portfolio p
|
||||
JOIN public.company_branch cb
|
||||
ON cb.company_id = p.company_id
|
||||
AND cb.branch_id = p.branch_id
|
||||
ON CONFLICT (company_id, company_branch_id, portfolio_reference) DO NOTHING;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,145 @@
|
||||
BEGIN;
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS platform;
|
||||
|
||||
CREATE TABLE platform.options
|
||||
(LIKE public.options INCLUDING ALL);
|
||||
|
||||
CREATE TABLE platform.options_values
|
||||
(LIKE public.options_values INCLUDING ALL);
|
||||
|
||||
CREATE TABLE platform.options_mapping
|
||||
(LIKE public.options_mapping INCLUDING ALL);
|
||||
|
||||
CREATE TABLE platform.company_options_mapping
|
||||
(LIKE public.comp_options_mapping INCLUDING ALL);
|
||||
|
||||
CREATE TABLE platform.options_history
|
||||
(LIKE public.options_history INCLUDING ALL);
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ADD COLUMN company_id smallint,
|
||||
ADD COLUMN portfolio_reference uuid;
|
||||
|
||||
INSERT INTO platform.options
|
||||
SELECT * FROM public.options;
|
||||
|
||||
INSERT INTO platform.options_values
|
||||
SELECT * FROM public.options_values;
|
||||
|
||||
INSERT INTO platform.options_mapping (
|
||||
portfolio_id, option_id, createdon, createdby, lasteditedon,
|
||||
lasteditedby, opt_value_id, opt_map_id, company_id, portfolio_reference
|
||||
)
|
||||
SELECT
|
||||
om.portfolio_id, om.option_id, om.createdon, om.createdby, om.lasteditedon,
|
||||
om.lasteditedby, om.opt_value_id, om.opt_map_id, 1,
|
||||
COALESCE(p.portfolio_reference, archived.portfolio_reference)
|
||||
FROM public.options_mapping om
|
||||
LEFT JOIN public.portfolio p ON p.portfolio_id = om.portfolio_id
|
||||
LEFT JOIN (
|
||||
SELECT portfolio_id, gen_random_uuid() portfolio_reference
|
||||
FROM public.options_mapping
|
||||
GROUP BY portfolio_id
|
||||
) archived ON archived.portfolio_id = om.portfolio_id;
|
||||
|
||||
INSERT INTO platform.company_options_mapping (
|
||||
company_id, option_id, createdon, createdby, lasteditedon,
|
||||
lasteditedby, opt_value_id, opt_map_id
|
||||
)
|
||||
SELECT
|
||||
1, option_id, createdon, createdby, lasteditedon,
|
||||
lasteditedby, opt_value_id, opt_map_id
|
||||
FROM public.comp_options_mapping;
|
||||
|
||||
INSERT INTO platform.options_history
|
||||
SELECT * FROM public.options_history;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ALTER COLUMN company_id SET NOT NULL,
|
||||
ALTER COLUMN portfolio_reference SET NOT NULL;
|
||||
|
||||
DO $duplicates$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM platform.options_mapping
|
||||
GROUP BY option_id, opt_value_id, portfolio_reference, company_id
|
||||
HAVING count(*) > 1
|
||||
) THEN
|
||||
RAISE EXCEPTION
|
||||
'Duplicate platform.options_mapping rows found for (option_id, opt_value_id, portfolio_reference, company_id)';
|
||||
END IF;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM platform.company_options_mapping
|
||||
GROUP BY option_id, opt_value_id, company_id
|
||||
HAVING count(*) > 1
|
||||
) THEN
|
||||
RAISE EXCEPTION
|
||||
'Duplicate platform.company_options_mapping rows found for (option_id, opt_value_id, company_id)';
|
||||
END IF;
|
||||
END
|
||||
$duplicates$;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ADD CONSTRAINT uq_platform_options_mapping_scope
|
||||
UNIQUE (option_id, opt_value_id, portfolio_reference, company_id);
|
||||
|
||||
ALTER TABLE platform.company_options_mapping
|
||||
ADD CONSTRAINT uq_platform_company_options_mapping_scope
|
||||
UNIQUE (option_id, opt_value_id, company_id);
|
||||
|
||||
-- CREATE TABLE ... LIKE does not copy foreign keys. Recreate the source FK
|
||||
-- against the copied platform table rather than retaining a public dependency.
|
||||
ALTER TABLE platform.options_mapping
|
||||
DROP CONSTRAINT IF EXISTS options_mapping_opt_value_id;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ADD CONSTRAINT options_mapping_opt_value_id
|
||||
FOREIGN KEY (opt_value_id)
|
||||
REFERENCES platform.options_values (opt_value_id)
|
||||
ON UPDATE CASCADE ON DELETE CASCADE NOT VALID;
|
||||
|
||||
-- Replace copied defaults that still point to public sequences.
|
||||
CREATE SEQUENCE platform.options_mapping_opt_map_id_seq;
|
||||
ALTER SEQUENCE platform.options_mapping_opt_map_id_seq
|
||||
OWNED BY platform.options_mapping.opt_map_id;
|
||||
ALTER TABLE platform.options_mapping
|
||||
ALTER COLUMN opt_map_id
|
||||
SET DEFAULT nextval('platform.options_mapping_opt_map_id_seq'::regclass);
|
||||
SELECT setval(
|
||||
'platform.options_mapping_opt_map_id_seq',
|
||||
COALESCE((SELECT max(opt_map_id) FROM platform.options_mapping), 1),
|
||||
EXISTS (SELECT 1 FROM platform.options_mapping)
|
||||
);
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
DROP COLUMN portfolio_id;
|
||||
|
||||
CREATE SEQUENCE platform.company_options_mapping_opt_map_id_seq;
|
||||
ALTER SEQUENCE platform.company_options_mapping_opt_map_id_seq
|
||||
OWNED BY platform.company_options_mapping.opt_map_id;
|
||||
ALTER TABLE platform.company_options_mapping
|
||||
ALTER COLUMN opt_map_id
|
||||
SET DEFAULT nextval('platform.company_options_mapping_opt_map_id_seq'::regclass);
|
||||
SELECT setval(
|
||||
'platform.company_options_mapping_opt_map_id_seq',
|
||||
COALESCE((SELECT max(opt_map_id) FROM platform.company_options_mapping), 1),
|
||||
EXISTS (SELECT 1 FROM platform.company_options_mapping)
|
||||
);
|
||||
|
||||
CREATE SEQUENCE platform.options_history_uid_seq;
|
||||
ALTER SEQUENCE platform.options_history_uid_seq
|
||||
OWNED BY platform.options_history.uid;
|
||||
ALTER TABLE platform.options_history
|
||||
ALTER COLUMN uid
|
||||
SET DEFAULT nextval('platform.options_history_uid_seq'::regclass);
|
||||
SELECT setval(
|
||||
'platform.options_history_uid_seq',
|
||||
COALESCE((SELECT max(uid) FROM platform.options_history), 1),
|
||||
EXISTS (SELECT 1 FROM platform.options_history)
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,76 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ADD COLUMN IF NOT EXISTS portfolio_reference uuid;
|
||||
|
||||
CREATE TEMPORARY TABLE portfolio_reference_migration (
|
||||
company_id smallint NOT NULL,
|
||||
portfolio_id smallint NOT NULL,
|
||||
portfolio_reference uuid NOT NULL,
|
||||
PRIMARY KEY (company_id, portfolio_id)
|
||||
) ON COMMIT DROP;
|
||||
|
||||
DO $migration$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema='platform' AND table_name='options_mapping'
|
||||
AND column_name='portfolio_id'
|
||||
) THEN
|
||||
EXECUTE $sql$
|
||||
INSERT INTO portfolio_reference_migration
|
||||
(company_id, portfolio_id, portfolio_reference)
|
||||
SELECT om.company_id, om.portfolio_id,
|
||||
COALESCE(
|
||||
(array_agg(p.portfolio_reference)
|
||||
FILTER (WHERE p.portfolio_reference IS NOT NULL))[1],
|
||||
gen_random_uuid())
|
||||
FROM platform.options_mapping om
|
||||
LEFT JOIN public.portfolio p ON p.portfolio_id=om.portfolio_id
|
||||
GROUP BY om.company_id, om.portfolio_id
|
||||
$sql$;
|
||||
EXECUTE $sql$
|
||||
UPDATE platform.options_mapping om
|
||||
SET portfolio_reference=prm.portfolio_reference
|
||||
FROM portfolio_reference_migration prm
|
||||
WHERE prm.company_id=om.company_id
|
||||
AND prm.portfolio_id=om.portfolio_id
|
||||
AND om.portfolio_reference IS NULL
|
||||
$sql$;
|
||||
END IF;
|
||||
END
|
||||
$migration$;
|
||||
|
||||
DO $validation$
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1 FROM platform.options_mapping WHERE portfolio_reference IS NULL) THEN
|
||||
RAISE EXCEPTION 'Some option mappings have no portfolio reference';
|
||||
END IF;
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM platform.options_mapping
|
||||
GROUP BY option_id, opt_value_id, portfolio_reference, company_id
|
||||
HAVING count(*) > 1
|
||||
) THEN
|
||||
RAISE EXCEPTION 'Duplicate option mappings found for portfolio references';
|
||||
END IF;
|
||||
END
|
||||
$validation$;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ALTER COLUMN portfolio_reference SET NOT NULL,
|
||||
DROP CONSTRAINT IF EXISTS uq_platform_options_mapping_scope;
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
ADD CONSTRAINT uq_platform_options_mapping_scope
|
||||
UNIQUE (option_id, opt_value_id, portfolio_reference, company_id);
|
||||
|
||||
ALTER TABLE platform.options_mapping
|
||||
DROP COLUMN IF EXISTS portfolio_id;
|
||||
|
||||
DROP INDEX IF EXISTS platform.uq_company_branch_portfolios_local_scope;
|
||||
|
||||
ALTER TABLE platform.company_branch_portfolios
|
||||
DROP COLUMN IF EXISTS portfolio_id;
|
||||
|
||||
COMMIT;
|
||||
@@ -0,0 +1,8 @@
|
||||
BEGIN;
|
||||
|
||||
UPDATE platform.application_query
|
||||
SET query_text = 'select!C0L!SELECT portfolio_id AS "value", portname AS "label", portfolio_reference::text AS "description", ''portfolio.'' AS "group" FROM portfolio WHERE branch_id=? AND isactive=? ORDER BY portname',
|
||||
ismigrated = true
|
||||
WHERE query_id = 3;
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user