76 lines
2.4 KiB
PL/PgSQL
76 lines
2.4 KiB
PL/PgSQL
-- Create dedicated user for navix application
|
|
CREATE USER navix_user WITH PASSWORD 'Aa123456';
|
|
|
|
-- Create database
|
|
CREATE DATABASE navix OWNER navix_user;
|
|
|
|
-- Grant privileges
|
|
GRANT ALL PRIVILEGES ON DATABASE navix TO navix_user;
|
|
|
|
-- Connect to navix database
|
|
\c navix;
|
|
|
|
-- Grant schema privileges
|
|
GRANT ALL ON SCHEMA public TO navix_user;
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO navix_user;
|
|
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO navix_user;
|
|
|
|
-- Create users table
|
|
CREATE TABLE users (
|
|
id SERIAL PRIMARY KEY,
|
|
username VARCHAR(50) UNIQUE NOT NULL,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create sections table
|
|
CREATE TABLE sections (
|
|
id SERIAL PRIMARY KEY,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name VARCHAR(100) NOT NULL,
|
|
display_order INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(user_id, name)
|
|
);
|
|
|
|
-- Create apps table
|
|
CREATE TABLE apps (
|
|
id SERIAL PRIMARY KEY,
|
|
section_id INTEGER NOT NULL REFERENCES sections(id) ON DELETE CASCADE,
|
|
name VARCHAR(100) NOT NULL,
|
|
url TEXT NOT NULL,
|
|
icon VARCHAR(255),
|
|
description TEXT,
|
|
display_order INTEGER DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create indexes for better query performance
|
|
CREATE INDEX idx_sections_user_id ON sections(user_id);
|
|
CREATE INDEX idx_apps_section_id ON apps(section_id);
|
|
CREATE INDEX idx_users_username ON users(username);
|
|
CREATE INDEX idx_users_email ON users(email);
|
|
|
|
-- Create updated_at trigger function
|
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
-- Add triggers for updated_at
|
|
CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
CREATE TRIGGER update_apps_updated_at BEFORE UPDATE ON apps
|
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
-- Grant privileges on all objects to navix_user
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO navix_user;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO navix_user;
|