web-dev-qa-db-fra.com

Entrée de clause manquante pour la table dans la fonction de déclenchement dans PostgreSQL

J'ai créé un déclencheur d'audit pour la table "Produit" qui devrait insérer des données dans "log_product".

CREATE FUNCTION public.insert_log_product()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF 
ROWS 0
AS $BODY$
BEGIN
IF (TG_OP = 'UPDATE')
THEN
    INSERT INTO log_table(
      operation,
      product_type_new, 
      product_type_old,
      product_name_new,
      product_name_old,
      vendor_id,
      available_quantity_unit_new,
      available_quantity_unit_old,
      delivery_time_in_days_new,
      delivery_time_in_days_old,
      change_date
    )
    VALUES(
      'UPDATE',
      new.product_type,
      old.product_type,
      new.product_name,
      old.product.name,
      new.vendor_id,
      old.vendor_id
      new.available_quantity_unity,
      old.available_quantity_unity,
      new.delivery_time_in_days,
      old.delivery_time_in_days,
      now()
    );

END IF;
RETURN NULL;
END;

 $BODY$;

Mais je reçois un message d'erreur:

org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "product"

La fonction est créée à l'aide de PGADMIN 4.2.

CREATE TRIGGER insert_log_product_trigger
AFTER INSERT OR DELETE OR UPDATE 
ON public.table
FOR EACH ROW
EXECUTE PROCEDURE public.insert_log_product();

L'exigence de notre table d'audit est d'avoir chaque colonne séparément, ancienne et nouvelle.

1
Marko Taht

Vous essayez d'insérer 42 valeurs dans 41 colonnes. Vérifiez Vendor_legal_ID.

1
Gerard H. Pille