ERRO: falta DE cláusula entrada para a tabela "Usuários"

0

Pergunta

Eu estou usando o postgresql e o pgadmin e eu sou novo para isso. Eu tenho uma tabela "Usuários" que tem as seguintes colunas (Username, Name, Email, Phone, Discount, Password, token, serial, created_on, updated_on, points, reference). Eu estava tentando criar um gatilho para a mesa, de modo que toda vez que uma nova inserção ocorre com um nome de usuário existente no campo de referência, os pontos do nome de usuário será incrementada em 50. Assim, existem duas operações - atualização da tabela existente, a inserção de novos valores.

Eu tentei criar uma função de gatilho, como este:

create or replace function points()
returns trigger as 
$BODY$
BEGIN
        if 
        new."Users"."reference" in (old."Users"."username")
        then
        Insert into "Users"(Username,Name,Email,Phone,Discount,Password,token,serial,created_on,updated_on,points,reference)
         values(new.Username,new.Name,new.Email,new.Phone,new.Discount,new.Password,new.token,new.serial,new.created_on,new.updated_on,new.points,new.reference);
        
        
         update "Users"
         set old."Users"."points" = old."Users"."points" + 50
         where "Users"."username" = (select "Users"."username" from "Users" where new."Users"."reference" in (old."Users"."username"));
                                     
                                     
         end if;
    RETURN new;
END;
$BODY$
language plpgsql;

e um gatilho, como este:

create trigger referece_points
after insert 
on "Users"
for each row
execute procedure points();

Mas quando tento inserir uma nova valores de "Usuários" da tabela, recebo o seguinte erro:

ERROR: missing FROM-clause entry for table "Users" LINE 1: SELECT new."Users"."reference" in (old."Users"."username") ^ Query: SELECT new."Users"."reference" in (old."Users"."username") CONTEXT: PL/pgSQL function points() line 2 at IF
plpgsql postgresql triggers
2021-11-23 21:47:46
1

Melhor resposta

0

O novo é composto variável do tipo que está relacionado a tabela associada a disparar.

O código new."Users"."reference" não tem qualquer sentido. Você deve escrever apenas new."reference".

2021-11-24 16:27:42

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................