Files
gerrit/src/main/webapp/WEB-INF/sql/upgrade017_018_postgres.sql
Shawn O. Pearce 70cf025bc4 Make external_id primary key of account_external_ids table
Having the primary key be (account_id, external_id) tuple was wrong,
we required exactly one match from an account_id in order to login a
user to their account.  If multiple matches were found we failed with
an exception and denied access.

When we move to a git based backend we really need external_id to be
the proper primary key of this entity, so we should fix it now before
more duplicates show up in real world databases.

Change-Id: Idd44dd67574fedb48e3e0bbd43526e1e67392dfc
Signed-off-by: Shawn O. Pearce <sop@google.com>
Reviewed-by: Grzegorz Kossakowski <grek@google.com>
2009-09-09 16:53:00 -07:00

47 lines
1.6 KiB
PL/PgSQL

-- Upgrade: schema_version 17 to 18 (PostgreSQL)
--
BEGIN;
SELECT check_schema_version(17);
ALTER TABLE approval_categories ADD abbreviated_name VARCHAR(4);
UPDATE approval_categories SET abbreviated_name = 'V' WHERE category_id = 'VRIF';
UPDATE approval_categories SET abbreviated_name = 'R' WHERE category_id = 'CRVW';
ALTER TABLE approval_categories ADD copy_min_score CHAR(1);
UPDATE approval_categories SET copy_min_score = 'N';
UPDATE approval_categories SET copy_min_score = 'Y' WHERE category_id = 'CRVW';
ALTER TABLE approval_categories ALTER COLUMN copy_min_score SET DEFAULT 'N';
ALTER TABLE approval_categories ALTER COLUMN copy_min_score SET NOT NULL;
UPDATE patch_comments SET
patch_set_id = (SELECT patch_set_id FROM patch_comments p
WHERE p.change_id = patch_comments.change_id
AND p.file_name = patch_comments.file_name
AND p.uuid = patch_comments.parent_uuid)
WHERE parent_uuid IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM patch_comments p
WHERE p.change_id = patch_comments.change_id
AND p.patch_set_id = patch_comments.patch_set_id
AND p.file_name = patch_comments.file_name
AND p.uuid = patch_comments.parent_uuid);
-- account_external_ids
--
DROP INDEX account_external_ids_byExt;
CREATE INDEX account_external_ids_byAccount
ON account_external_ids (account_id);
ALTER TABLE account_external_ids DROP CONSTRAINT account_external_ids_pkey;
ALTER TABLE account_external_ids ADD PRIMARY KEY (external_id);
DROP TABLE patches;
UPDATE schema_version SET version_nbr = 18;
COMMIT;