Vollständige Next.js 15 Portfolio-Website mit: - Blog-System mit 100+ Artikeln - Supabase-Integration - Responsive Design mit Tailwind CSS - TypeScript-Konfiguration - Testing-Setup mit Vitest und Playwright Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
120 lines
2.9 KiB
Markdown
120 lines
2.9 KiB
Markdown
# How to Apply the Rate Limits Migration
|
|
|
|
## Quick Start (Manual Application)
|
|
|
|
Since the Supabase CLI is not configured for this project, please follow these steps to apply the migration manually through the Supabase dashboard:
|
|
|
|
### Step 1: Access the SQL Editor
|
|
|
|
Open the Supabase SQL Editor in your browser:
|
|
```
|
|
https://app.supabase.com/project/mxadgucxhmstlzsbgmoz/sql
|
|
```
|
|
|
|
### Step 2: Copy the Migration SQL
|
|
|
|
Open the migration file:
|
|
```
|
|
supabase/migrations/20260125_create_rate_limits_table.sql
|
|
```
|
|
|
|
Copy the entire contents (approximately 42 lines of SQL).
|
|
|
|
### Step 3: Execute the Migration
|
|
|
|
1. In the SQL Editor, paste the copied SQL
|
|
2. Click the **"RUN"** button (or press `Ctrl+Enter` / `Cmd+Enter`)
|
|
3. Wait for the success message: "Success. No rows returned"
|
|
|
|
### Step 4: Verify the Table Was Created
|
|
|
|
**Option A: Using Table Editor**
|
|
1. Navigate to: https://app.supabase.com/project/mxadgucxhmstlzsbgmoz/editor
|
|
2. Look for **"rate_limits"** in the table list (left sidebar)
|
|
3. Click on it to see the table structure
|
|
|
|
**Option B: Using SQL Query**
|
|
Run this query in the SQL Editor:
|
|
```sql
|
|
SELECT
|
|
table_name,
|
|
column_name,
|
|
data_type,
|
|
is_nullable
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'rate_limits'
|
|
ORDER BY ordinal_position;
|
|
```
|
|
|
|
You should see 5 rows (one for each column):
|
|
- identifier (text)
|
|
- count (integer)
|
|
- window_start (timestamp with time zone)
|
|
- created_at (timestamp with time zone)
|
|
- updated_at (timestamp with time zone)
|
|
|
|
**Option C: Check Indexes**
|
|
Run this query to verify indexes were created:
|
|
```sql
|
|
SELECT
|
|
indexname,
|
|
indexdef
|
|
FROM pg_indexes
|
|
WHERE tablename = 'rate_limits';
|
|
```
|
|
|
|
You should see:
|
|
- Primary key on (identifier, window_start)
|
|
- idx_rate_limits_identifier_window
|
|
- idx_rate_limits_window_start
|
|
|
|
## Troubleshooting
|
|
|
|
### Error: "relation 'rate_limits' already exists"
|
|
|
|
The table is already created! No action needed. Verify it exists using the verification steps above.
|
|
|
|
### Error: "permission denied"
|
|
|
|
Make sure you're:
|
|
1. Logged into the correct Supabase account
|
|
2. Have admin/owner permissions on the project
|
|
3. Using the correct project URL
|
|
|
|
### Table not visible in Table Editor
|
|
|
|
1. Refresh the page (F5)
|
|
2. Check the SQL output for error messages
|
|
3. Try the SQL verification query in Option B above
|
|
|
|
### Need to Revert/Drop the Table?
|
|
|
|
If you need to start over, run this SQL:
|
|
```sql
|
|
DROP TABLE IF EXISTS rate_limits CASCADE;
|
|
```
|
|
|
|
Then re-apply the migration from Step 1.
|
|
|
|
## Alternative: Automated Scripts
|
|
|
|
We've provided scripts for automated migration, but they require additional setup:
|
|
|
|
### Using apply-migration.js (requires service role key)
|
|
|
|
1. Add `SUPABASE_SERVICE_ROLE_KEY` to `.env.local`
|
|
2. Run: `node scripts/apply-migration.js`
|
|
|
|
### Using Supabase CLI (if installed)
|
|
|
|
```bash
|
|
supabase migration up
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
After the migration is applied successfully:
|
|
1. ✅ Verify the table exists (see Step 4 above)
|
|
2. ✅ Mark this subtask as complete
|
|
3. ✅ Proceed to Phase 2: Building the rate limiting utility
|