# Fix Database Permissions Error

## Problem

You're getting this error:
```
error: permission denied for schema public
code: '42501'
```

This happens because the `read_write_user` doesn't have CREATE permission on the `public` schema.

## Solution

You need to grant permissions using a **database admin/superuser account**. The `read_write_user` cannot grant permissions to itself.

## Option 1: Using Admin Database URL (Recommended)

1. **Get admin database credentials** from your AWS RDS console or database administrator
   - You need a user with superuser privileges or the schema owner

2. **Add to your `.env` file:**
   ```env
   ADMIN_DATABASE_URL=postgresql://admin_user:admin_password@db.livingai.app:5432/livingai_test_db
   ```

3. **Run the setup script:**
   ```bash
   npm run setup-db
   ```

## Option 2: Manual SQL (If you have database access)

Connect to your database using any PostgreSQL client (psql, pgAdmin, DBeaver, etc.) as an admin user and run:

```sql
GRANT USAGE ON SCHEMA public TO read_write_user;
GRANT CREATE ON SCHEMA public TO read_write_user;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
```

## Option 3: AWS RDS Console

If you're using AWS RDS:

1. Go to AWS RDS Console
2. Find your database instance
3. Use "Query Editor" or connect via psql with master credentials
4. Run the SQL commands from Option 2

## Verification

After running the fix, verify permissions:

```sql
SELECT 
  has_schema_privilege('read_write_user', 'public', 'USAGE') as has_usage,
  has_schema_privilege('read_write_user', 'public', 'CREATE') as has_create;
```

Both should return `true`.

## Why This Happens

- PostgreSQL doesn't allow users to grant permissions to themselves
- The `read_write_user` needs CREATE permission to create tables (like `otp_codes`)
- Only a superuser or schema owner can grant these permissions

## After Fixing

1. Restart your application
2. Try creating an OTP - it should work now

