20 lines
691 B
SQL
20 lines
691 B
SQL
-- Multi-role support: user_roles junction table + backfill from users.role_id
|
|
|
|
CREATE TABLE IF NOT EXISTS user_roles (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE RESTRICT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
UNIQUE (user_id, role_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_roles_user_id ON user_roles(user_id);
|
|
CREATE INDEX IF NOT EXISTS idx_user_roles_role_id ON user_roles(role_id);
|
|
|
|
INSERT INTO user_roles (user_id, role_id)
|
|
SELECT id, role_id
|
|
FROM users
|
|
WHERE role_id IS NOT NULL
|
|
AND deleted_at IS NULL
|
|
ON CONFLICT (user_id, role_id) DO NOTHING;
|