Работал ли с триггерами в PostgreSQL
Python
Senior
Без компании
Работал ли с триггерами в PostgreSQL
Ответы
Да, работал. Триггеры в PostgreSQL — это функции, автоматически выполняемые при определенных событиях (INSERT, UPDATE, DELETE и т.д.) в таблице. Они полезны для аудита, валидации данных или поддержания целостности.
Пример триггера для логирования изменений в таблице `users`:
```
CREATE OR REPLACE FUNCTION log_user_changes()
RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
INSERT INTO user_audit(user_id, action, change_time)
VALUES (OLD.id, 'DELETE', NOW());
ELSIF (TG_OP = 'UPDATE') THEN
INSERT INTO user_audit(user_id, action, change_time)
VALUES (NEW.id, 'UPDATE', NOW());
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO user_audit(user_id, action, change_time)
VALUES (NEW.id, 'INSERT', NOW());
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER user_changes_trigger
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW EXECUTE FUNCTION log_user_changes();
```
Важные нюансы:
- Триггеры могут быть BEFORE или AFTER (до/после операции)
- FOR EACH ROW (для каждой строки) или FOR EACH STATEMENT (для оператора)
- RETURN NEW/OLD влияет на поведение при BEFORE-триггерах