恢复了以下迁移文件到原始状态: - 004_add_redeem_code_notes.sql - 005_schema_parity.sql - 006_fix_invalid_subscription_expires_at.sql - 007_add_user_allowed_groups.sql - 008_seed_default_group.sql - 009_fix_usage_logs_cache_columns.sql - 010_add_usage_logs_aggregated_indexes.sql - 011_remove_duplicate_unique_indexes.sql - 012_add_user_subscription_soft_delete.sql - 013_log_orphan_allowed_groups.sql - 014_drop_legacy_allowed_groups.sql - 015_fix_settings_unique_constraint.sql - 016_soft_delete_partial_unique_indexes.sql - 018_user_attributes.sql - 019_migrate_wechat_to_attributes.sql - 024_add_gemini_tier_id.sql 数据库迁移文件不应在应用后修改,即使只是注释。
21 lines
828 B
SQL
21 lines
828 B
SQL
-- Add user_allowed_groups join table to replace users.allowed_groups (BIGINT[]).
|
|
-- Phase 1: create table + backfill from the legacy array column.
|
|
|
|
CREATE TABLE IF NOT EXISTS user_allowed_groups (
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
group_id BIGINT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (user_id, group_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_allowed_groups_group_id ON user_allowed_groups(group_id);
|
|
|
|
-- Backfill from the legacy users.allowed_groups array.
|
|
INSERT INTO user_allowed_groups (user_id, group_id)
|
|
SELECT u.id, x.group_id
|
|
FROM users u
|
|
CROSS JOIN LATERAL unnest(u.allowed_groups) AS x(group_id)
|
|
JOIN groups g ON g.id = x.group_id
|
|
WHERE u.allowed_groups IS NOT NULL
|
|
ON CONFLICT DO NOTHING;
|