CREATE TABLE IF NOT EXISTS users ( id BIGSERIAL PRIMARY KEY, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- Create a function to set created_at and updated_at on INSERT CREATE OR REPLACE FUNCTION set_timestamps_on_insert() RETURNS TRIGGER AS $$ BEGIN NEW.created_at = NOW(); NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create a trigger to call the function after INSERT CREATE TRIGGER set_timestamps_on_insert BEFORE INSERT ON users FOR EACH ROW EXECUTE FUNCTION set_timestamps_on_insert(); -- Create a function to set updated_at on UPDATE CREATE OR REPLACE FUNCTION set_updated_at() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Create a trigger to call the function after UPDATE CREATE TRIGGER set_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION set_updated_at(); CREATE INDEX users_username_index ON users (username);