CREATE TABLE IF NOT EXISTS roles ( id UUID DEFAULT uuid_generate_v4(), parent_id UUID, name TEXT NOT NULL, key TEXT NOT NULL, description TEXT, can_use BOOLEAN NOT NULL DEFAULT TRUE, created_at BIGINT NOT NULL DEFAULT (extract(epoch from now()) * 1000), updated_at BIGINT NOT NULL DEFAULT (extract(epoch from now()) * 1000), PRIMARY KEY (id), UNIQUE (key), CONSTRAINT fk_roles_parent_id FOREIGN KEY(parent_id) REFERENCES roles(id) ); CREATE UNIQUE INDEX uidx_roles_key ON roles (key); CREATE INDEX idx_roles_parent_id ON roles (parent_id); -- trigger (updated_at) CREATE TRIGGER tg_roles_updated_at BEFORE UPDATE ON roles FOR EACH ROW EXECUTE PROCEDURE update_updated_at_column();