Здравствуйте. Смотрю видеокурсы по SQL. Тренируюсь на PostgreSQL. И в одном уроке разбираются триггерные функции. Я скопировал код с этого видео. Попробовал всё исполнить. Триггера, связанные с вставкой новой записи и её удалением, работают исправно. А вот триггеры, которые должны запускаться при изменении записи - выдают ошибку. Ошибка такая:
loftblog_lesson4=# UPDATE profiles SET name = 'Alex' WHERE user_id = 2;
ERROR: record "old" has no field "user_id"
CONTEXT: SQL statement "UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id"
PL/pgSQL function update_user() line 3 at SQL statement
SQL statement "UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id"
PL/pgSQL function update_user() line 3 at SQL statement
А вот сам код для создания таблиц и триггера:
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(32) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL);
CREATE TABLE IF NOT EXISTS profiles (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL,
name VARCHAR(255),
last_name VARCHAR(255),
photo_path VARCHAR(255),
about TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE OR REPLACE FUNCTION update_user() RETURNS TRIGGER
AS $$
BEGIN
UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id;
RETURN OLD;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS tr_update_user ON profiles;
CREATE TRIGGER tr_update_user AFTER UPDATE ON profiles
FOR EACH ROW EXECUTE PROCEDURE update_user();