removed all sql/migrations

This commit is contained in:
root 2025-10-13 07:47:01 +08:00
parent 9db49799f9
commit 50d8bc3841
8 changed files with 0 additions and 246 deletions

View File

@ -1 +0,0 @@
-- No-op down migration; manual rollback required.

View File

@ -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;

View File

@ -1 +0,0 @@
-- No-op down migration; manual rollback required.

View File

@ -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;

View File

@ -1 +0,0 @@
-- No-op down migration; manual rollback required.

View File

@ -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
-- =========================================

View File

@ -1 +0,0 @@
-- No-op down migration; manual rollback required.

View File

@ -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
-- =========================================