removed all sql/migrations
This commit is contained in:
parent
9db49799f9
commit
50d8bc3841
@ -1 +0,0 @@
|
||||
-- No-op down migration; manual rollback required.
|
||||
@ -1,23 +0,0 @@
|
||||
-- Migration: create admin_settings table for permission matrix
|
||||
|
||||
BEGIN;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS admin_settings (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
module_key TEXT NOT NULL,
|
||||
role TEXT NOT NULL,
|
||||
enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
version BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
CONSTRAINT admin_settings_module_role_uk UNIQUE (module_key, role)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_admin_settings_version ON admin_settings (version);
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_admin_settings_set_updated_at ON admin_settings;
|
||||
CREATE TRIGGER trg_admin_settings_set_updated_at
|
||||
BEFORE UPDATE ON admin_settings
|
||||
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
|
||||
|
||||
COMMIT;
|
||||
@ -1 +0,0 @@
|
||||
-- No-op down migration; manual rollback required.
|
||||
@ -1,36 +0,0 @@
|
||||
BEGIN;
|
||||
ALTER TABLE public.users
|
||||
ADD COLUMN IF NOT EXISTS level INTEGER DEFAULT 20 NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS role TEXT DEFAULT 'user' NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS groups JSONB DEFAULT '[]'::jsonb NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS permissions JSONB DEFAULT '[]'::jsonb NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS mfa_totp_secret TEXT,
|
||||
ADD COLUMN IF NOT EXISTS mfa_enabled BOOLEAN DEFAULT false NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS mfa_secret_issued_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS mfa_confirmed_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS email_verified_at TIMESTAMPTZ,
|
||||
ADD COLUMN IF NOT EXISTS email_verified BOOLEAN GENERATED ALWAYS AS ((email_verified_at IS NOT NULL)) STORED;
|
||||
|
||||
-- 重新创建最新的用户索引
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS users_username_lower_uk ON public.users (lower(username));
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS users_email_lower_uk ON public.users (lower(email)) WHERE email IS NOT NULL;
|
||||
|
||||
UPDATE public.users
|
||||
SET role = CASE level
|
||||
WHEN 0 THEN 'admin'
|
||||
WHEN 10 THEN 'operator'
|
||||
ELSE 'user'
|
||||
END,
|
||||
groups = CASE level
|
||||
WHEN 0 THEN '["Admin"]'::jsonb
|
||||
WHEN 10 THEN '["Operator"]'::jsonb
|
||||
ELSE '["User"]'::jsonb
|
||||
END,
|
||||
permissions = CASE level
|
||||
WHEN 0 THEN '["session:read","session:write","user:manage"]'::jsonb
|
||||
WHEN 10 THEN '["session:read","session:write"]'::jsonb
|
||||
ELSE '["session:read"]'::jsonb
|
||||
END
|
||||
WHERE role IS NULL OR role = '' OR groups = '[]'::jsonb;
|
||||
|
||||
COMMIT;
|
||||
@ -1 +0,0 @@
|
||||
-- No-op down migration; manual rollback required.
|
||||
@ -1,97 +0,0 @@
|
||||
-- =========================================
|
||||
-- 20251008-fix-generated-columns.sql
|
||||
-- Migration: Remove generated columns incompatible with pglogical
|
||||
-- Safe to re-run (幂等)
|
||||
-- =========================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- 尝试确保当前用户对 pglogical schema 有访问权限
|
||||
DO $grant$
|
||||
BEGIN
|
||||
BEGIN
|
||||
EXECUTE 'GRANT USAGE ON SCHEMA pglogical TO ' || current_user;
|
||||
EXECUTE 'GRANT ALL ON ALL TABLES IN SCHEMA pglogical TO ' || current_user;
|
||||
EXECUTE 'GRANT ALL ON ALL SEQUENCES IN SCHEMA pglogical TO ' || current_user;
|
||||
EXECUTE 'GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA pglogical TO ' || current_user;
|
||||
RAISE NOTICE 'Granted pglogical schema permissions to current_user: %', current_user;
|
||||
EXCEPTION WHEN others THEN
|
||||
RAISE NOTICE 'Skipping GRANT for schema pglogical (possibly already granted or insufficient privilege)';
|
||||
END;
|
||||
END;
|
||||
$grant$;
|
||||
|
||||
-- =========================================
|
||||
-- Step 1. 检查并删除旧的 generated column
|
||||
-- =========================================
|
||||
DO $drop$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'email_verified'
|
||||
AND is_generated = 'ALWAYS'
|
||||
) THEN
|
||||
RAISE NOTICE 'Detected generated column: users.email_verified — dropping it for pglogical compatibility';
|
||||
EXECUTE 'ALTER TABLE public.users DROP COLUMN email_verified';
|
||||
ELSE
|
||||
RAISE NOTICE 'No generated column detected: users.email_verified is safe';
|
||||
END IF;
|
||||
END;
|
||||
$drop$;
|
||||
|
||||
-- =========================================
|
||||
-- Step 2. 添加普通布尔列 (safe re-run)
|
||||
-- =========================================
|
||||
DO $add$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'email_verified'
|
||||
) THEN
|
||||
RAISE NOTICE 'Adding normal column: users.email_verified (BOOLEAN DEFAULT false)';
|
||||
EXECUTE 'ALTER TABLE public.users ADD COLUMN email_verified BOOLEAN DEFAULT false NOT NULL';
|
||||
ELSE
|
||||
RAISE NOTICE 'Column users.email_verified already exists, skipping ADD COLUMN';
|
||||
END IF;
|
||||
END;
|
||||
$add$;
|
||||
|
||||
-- =========================================
|
||||
-- Step 3. 创建维护触发器
|
||||
-- =========================================
|
||||
DROP FUNCTION IF EXISTS maintain_email_verified() CASCADE;
|
||||
|
||||
CREATE FUNCTION maintain_email_verified() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
NEW.email_verified := (NEW.email_verified_at IS NOT NULL);
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_users_maintain_email_verified ON public.users;
|
||||
|
||||
CREATE TRIGGER trg_users_maintain_email_verified
|
||||
BEFORE INSERT OR UPDATE ON public.users
|
||||
FOR EACH ROW EXECUTE FUNCTION maintain_email_verified();
|
||||
|
||||
-- =========================================
|
||||
-- Step 4. 修正现有数据
|
||||
-- =========================================
|
||||
UPDATE public.users
|
||||
SET email_verified = (email_verified_at IS NOT NULL)
|
||||
WHERE email_verified IS DISTINCT FROM (email_verified_at IS NOT NULL);
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- =========================================
|
||||
-- End of migration
|
||||
-- =========================================
|
||||
|
||||
@ -1 +0,0 @@
|
||||
-- No-op down migration; manual rollback required.
|
||||
@ -1,86 +0,0 @@
|
||||
-- =========================================
|
||||
-- 20251008.migrate.generated-columns.sql
|
||||
-- Migration: Convert generated columns to normal + trigger
|
||||
-- Safe to re-run (幂等)
|
||||
-- =========================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- 1️⃣ 兼容 pglogical:确保当前用户可访问 schema
|
||||
DO $$
|
||||
BEGIN
|
||||
BEGIN
|
||||
GRANT USAGE ON SCHEMA pglogical TO CURRENT_USER;
|
||||
RAISE NOTICE 'Granted USAGE on schema pglogical to current user';
|
||||
EXCEPTION WHEN OTHERS THEN
|
||||
RAISE NOTICE 'Skipping GRANT for schema pglogical (possibly already granted or insufficient privilege)';
|
||||
END;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 2️⃣ 删除不兼容的 generated column
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'email_verified'
|
||||
AND is_generated = 'ALWAYS'
|
||||
) THEN
|
||||
RAISE NOTICE 'Detected generated column: users.email_verified — dropping it for pglogical compatibility';
|
||||
ALTER TABLE public.users DROP COLUMN email_verified;
|
||||
ELSE
|
||||
RAISE NOTICE 'No generated column detected: users.email_verified is safe';
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 3️⃣ 确保存在普通列 email_verified
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'public'
|
||||
AND table_name = 'users'
|
||||
AND column_name = 'email_verified'
|
||||
) THEN
|
||||
RAISE NOTICE 'Adding normal column: users.email_verified (BOOLEAN DEFAULT false)';
|
||||
ALTER TABLE public.users ADD COLUMN email_verified BOOLEAN DEFAULT false NOT NULL;
|
||||
ELSE
|
||||
RAISE NOTICE 'Column users.email_verified already exists, skipping ADD COLUMN';
|
||||
END IF;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 4️⃣ 定义幂等触发器函数
|
||||
DROP FUNCTION IF EXISTS public.maintain_email_verified() CASCADE;
|
||||
|
||||
CREATE FUNCTION public.maintain_email_verified() RETURNS trigger
|
||||
LANGUAGE plpgsql
|
||||
AS $$
|
||||
BEGIN
|
||||
NEW.email_verified := (NEW.email_verified_at IS NOT NULL);
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$;
|
||||
|
||||
-- 5️⃣ 触发器同步 email_verified 与 email_verified_at
|
||||
DROP TRIGGER IF EXISTS trg_users_maintain_email_verified ON public.users;
|
||||
|
||||
CREATE TRIGGER trg_users_maintain_email_verified
|
||||
BEFORE INSERT OR UPDATE ON public.users
|
||||
FOR EACH ROW EXECUTE FUNCTION public.maintain_email_verified();
|
||||
|
||||
-- 6️⃣ 修正历史数据
|
||||
UPDATE public.users
|
||||
SET email_verified = (email_verified_at IS NOT NULL)
|
||||
WHERE email_verified IS DISTINCT FROM (email_verified_at IS NOT NULL);
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- =========================================
|
||||
-- End of migration
|
||||
-- =========================================
|
||||
|
||||
Loading…
Reference in New Issue
Block a user