Perplexica/supabase/migrations/20240106_init.sql
2025-01-06 21:24:54 -07:00

75 lines
No EOL
2.2 KiB
PL/PgSQL

-- Create businesses table
CREATE TABLE IF NOT EXISTS public.businesses (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
address TEXT NOT NULL,
phone TEXT NOT NULL,
description TEXT NOT NULL,
website TEXT,
source TEXT NOT NULL,
rating REAL,
location POINT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Create indexes
CREATE INDEX IF NOT EXISTS idx_businesses_source ON public.businesses(source);
CREATE INDEX IF NOT EXISTS idx_businesses_rating ON public.businesses(rating);
CREATE INDEX IF NOT EXISTS idx_businesses_location ON public.businesses USING GIST(location);
-- Enable Row Level Security (RLS)
ALTER TABLE public.businesses ENABLE ROW LEVEL SECURITY;
-- Create policies
CREATE POLICY "Allow public read access"
ON public.businesses
FOR SELECT
USING (true);
CREATE POLICY "Allow service role insert/update"
ON public.businesses
FOR ALL
USING (auth.role() = 'service_role');
-- Create function to update updated_at timestamp
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ language 'plpgsql';
-- Create trigger for updated_at
CREATE TRIGGER update_businesses_updated_at
BEFORE UPDATE ON public.businesses
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- Create the searches table
CREATE TABLE searches (
id BIGSERIAL PRIMARY KEY,
query TEXT NOT NULL,
results JSONB NOT NULL DEFAULT '[]',
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Create an index on the query column for faster lookups
CREATE INDEX searches_query_idx ON searches USING GIN (to_tsvector('english', query));
-- Create a function to update the 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 a trigger to automatically update the updated_at column
CREATE TRIGGER update_searches_updated_at
BEFORE UPDATE ON searches
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();