From 5333eebdbf2b29db07e878c339f6f0ed9539b1a2 Mon Sep 17 00:00:00 2001 From: Masaki Yatsu Date: Sun, 23 Nov 2025 00:45:15 +0900 Subject: [PATCH] fix(superset): fix user ID on restoring data --- superset/restore-datasets-charts.sh | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/superset/restore-datasets-charts.sh b/superset/restore-datasets-charts.sh index b1333f9..946d150 100755 --- a/superset/restore-datasets-charts.sh +++ b/superset/restore-datasets-charts.sh @@ -102,6 +102,69 @@ for table in "${TABLES[@]}"; do echo " ✓ Successfully restored $table" done +echo "" +echo "Fixing orphaned user references..." + +# Fix orphaned foreign key references to ab_user +kubectl exec -n "$POSTGRES_NAMESPACE" "$POD_NAME" -- \ + bash -c "PGPASSWORD='$DB_PASSWORD' psql -h localhost -U $DB_USER -d $DB_NAME" <<'EOF' +BEGIN; + +-- Temporarily disable triggers to allow updates +SET session_replication_role = replica; + +-- Fix all orphaned references to ab_user (replace with user_id = 1) +UPDATE dashboards SET created_by_fk = 1 WHERE created_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE dashboards SET changed_by_fk = 1 WHERE changed_by_fk NOT IN (SELECT id FROM ab_user); + +UPDATE tables SET created_by_fk = 1 WHERE created_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE tables SET changed_by_fk = 1 WHERE changed_by_fk NOT IN (SELECT id FROM ab_user); + +UPDATE slices SET created_by_fk = 1 WHERE created_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE slices SET changed_by_fk = 1 WHERE changed_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE slices SET last_saved_by_fk = 1 WHERE last_saved_by_fk NOT IN (SELECT id FROM ab_user); + +UPDATE sql_metrics SET created_by_fk = 1 WHERE created_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE sql_metrics SET changed_by_fk = 1 WHERE changed_by_fk NOT IN (SELECT id FROM ab_user); + +UPDATE table_columns SET created_by_fk = 1 WHERE created_by_fk NOT IN (SELECT id FROM ab_user); +UPDATE table_columns SET changed_by_fk = 1 WHERE changed_by_fk NOT IN (SELECT id FROM ab_user); + +-- Re-enable triggers +SET session_replication_role = DEFAULT; + +COMMIT; +EOF + +echo " ✓ Successfully fixed orphaned user references" + +echo "" +echo "Fixing PostgreSQL sequences..." + +# Fix all sequences to prevent primary key conflicts +kubectl exec -n "$POSTGRES_NAMESPACE" "$POD_NAME" -- \ + bash -c "PGPASSWORD='$DB_PASSWORD' psql -h localhost -U $DB_USER -d $DB_NAME" <<'EOF' +DO $$ +DECLARE + r RECORD; +BEGIN + FOR r IN + SELECT s.relname AS seq_name, t.relname AS table_name + FROM pg_class AS s + JOIN pg_depend AS d ON d.objid = s.oid + JOIN pg_class AS t ON d.refobjid = t.oid + WHERE s.relkind = 'S' + AND t.relkind = 'r' + AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public') + LOOP + EXECUTE format('SELECT setval(%L, (SELECT COALESCE(MAX(id), 0) + 1 FROM %I))', r.seq_name, r.table_name); + RAISE NOTICE 'Fixed sequence % for table %', r.seq_name, r.table_name; + END LOOP; +END $$; +EOF + +echo " ✓ Successfully fixed all sequences" + echo "" echo "Restoration completed successfully!" echo ""