init.sql 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. -- Initialize BYOP Sample Database
  2. \echo 'Starting database initialization...'
  3. -- Create users table
  4. CREATE TABLE IF NOT EXISTS users (
  5. id SERIAL PRIMARY KEY,
  6. name VARCHAR(255) NOT NULL,
  7. email VARCHAR(255) UNIQUE NOT NULL,
  8. role VARCHAR(100) DEFAULT 'user',
  9. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  10. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  11. );
  12. -- Insert sample data
  13. INSERT INTO users (name, email, role) VALUES
  14. ('John Doe', 'john@byop.dev', 'admin'),
  15. ('Jane Smith', 'jane@byop.dev', 'developer'),
  16. ('Mike Johnson', 'mike@byop.dev', 'designer'),
  17. ('Sarah Wilson', 'sarah@byop.dev', 'tester')
  18. ON CONFLICT (email) DO NOTHING;
  19. -- Create indexes for better performance
  20. CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
  21. CREATE INDEX IF NOT EXISTS idx_users_created_at ON users(created_at);
  22. -- Create a function to update the updated_at timestamp
  23. CREATE OR REPLACE FUNCTION update_updated_at_column()
  24. RETURNS TRIGGER AS $$
  25. BEGIN
  26. NEW.updated_at = CURRENT_TIMESTAMP;
  27. RETURN NEW;
  28. END;
  29. $$ language 'plpgsql';
  30. -- Create trigger to automatically update updated_at
  31. DROP TRIGGER IF EXISTS update_users_updated_at ON users;
  32. CREATE TRIGGER update_users_updated_at
  33. BEFORE UPDATE ON users
  34. FOR EACH ROW
  35. EXECUTE FUNCTION update_updated_at_column();
  36. \echo 'Database initialization completed successfully!'