88 lines
2.8 KiB
PL/PgSQL
88 lines
2.8 KiB
PL/PgSQL
-- PostgreSQL Database Setup Script for Disk Reorganizer
|
|
-- Database: disk_reorganizer_db
|
|
-- User: disk_reorg_user
|
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
|
|
-- Create the database (run as superuser: auction)
|
|
CREATE DATABASE disk_reorganizer_db
|
|
WITH
|
|
ENCODING = 'UTF8'
|
|
LC_COLLATE = 'en_US.UTF-8'
|
|
LC_CTYPE = 'en_US.UTF-8'
|
|
TEMPLATE = template0;
|
|
|
|
-- Connect to the new database
|
|
\c disk_reorganizer_db
|
|
|
|
-- Create the user
|
|
CREATE USER disk_reorg_user WITH PASSWORD 'heel-goed-wachtwoord';
|
|
|
|
-- Create files table
|
|
CREATE TABLE IF NOT EXISTS files (
|
|
path TEXT PRIMARY KEY,
|
|
size BIGINT NOT NULL,
|
|
modified_time DOUBLE PRECISION NOT NULL,
|
|
disk_label TEXT NOT NULL,
|
|
checksum TEXT,
|
|
status TEXT DEFAULT 'indexed',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create index on disk column for faster queries
|
|
CREATE INDEX IF NOT EXISTS idx_files_disk ON files(disk_label);
|
|
CREATE INDEX IF NOT EXISTS idx_files_status ON files(status);
|
|
|
|
-- Create operations table
|
|
CREATE TABLE IF NOT EXISTS operations (
|
|
id SERIAL PRIMARY KEY,
|
|
source_path TEXT NOT NULL,
|
|
target_path TEXT NOT NULL,
|
|
operation_type TEXT NOT NULL,
|
|
executed INTEGER DEFAULT 0,
|
|
verified INTEGER DEFAULT 0,
|
|
error TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
executed_at TIMESTAMP
|
|
);
|
|
|
|
-- Create index on operations for faster lookups
|
|
CREATE INDEX IF NOT EXISTS idx_operations_executed ON operations(executed);
|
|
CREATE INDEX IF NOT EXISTS idx_operations_source ON operations(source_path);
|
|
|
|
-- Grant privileges to disk_reorg_user
|
|
GRANT CONNECT ON DATABASE disk_reorganizer_db TO disk_reorg_user;
|
|
GRANT USAGE ON SCHEMA public TO disk_reorg_user;
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO disk_reorg_user;
|
|
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO disk_reorg_user;
|
|
|
|
-- future tables/sequences created by your owner role (pick the role that creates them)
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE auction IN SCHEMA public
|
|
GRANT ALL PRIVILEGES ON TABLES TO disk_reorg_user;
|
|
|
|
ALTER DEFAULT PRIVILEGES FOR ROLE auction IN SCHEMA public
|
|
GRANT ALL PRIVILEGES ON SEQUENCES TO disk_reorg_user;
|
|
|
|
-- Create function to update updated_at timestamp
|
|
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Create trigger for files table
|
|
CREATE TRIGGER update_files_updated_at
|
|
BEFORE UPDATE ON files
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at_column();
|
|
|
|
-- Display success message
|
|
\echo 'Database setup completed successfully!'
|
|
\echo 'Database: disk_reorganizer_db'
|
|
\echo 'User: disk_reorg_user'
|
|
\echo 'Tables created: files, operations'
|
|
\echo 'Indexes and triggers created 2)'
|