Files
workout_buddy/db/init.sql

51 lines
1.7 KiB
PL/PgSQL
Executable File

-- Create Users table
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(120) UNIQUE NOT NULL,
age INTEGER NOT NULL,
location VARCHAR(100) NOT NULL,
gender VARCHAR(10) NOT NULL,
password_hash VARCHAR(128) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Create Messages table
CREATE TABLE IF NOT EXISTS messages (
id SERIAL PRIMARY KEY,
sender_id INTEGER NOT NULL REFERENCES users(id),
receiver_id INTEGER NOT NULL REFERENCES users(id),
content VARCHAR(500) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Create index for faster queries on location
CREATE INDEX IF NOT EXISTS idx_users_location ON users(location);
-- Create indexes for faster message retrieval
CREATE INDEX IF NOT EXISTS idx_messages_sender ON messages(sender_id);
CREATE INDEX IF NOT EXISTS idx_messages_receiver ON messages(receiver_id);
-- Function to update the updated_at column
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- Drop the trigger if it already exists to avoid conflicts
DROP TRIGGER IF EXISTS update_users_updated_at ON users;
-- Create trigger to automatically update the updated_at column
CREATE TRIGGER update_users_updated_at
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- Grant necessary permissions to workout_user
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO workout_user;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO workout_user;