为什么我在pgadmin4中创建触发器时出错



在pgAdmin 中创建此触发器时出错

create table users
(
id serial PRIMARY KEY,
email character varying (255) unique not null,
password character varying (12) not null
);
select * from users
insert into users values('arsa', '1234')
---Login Function---
create function login(_email character varying,_password character varying)
return int as
$$
begin
if(select count(*) from users where email = _email and password = _password) > 0 then
return 1;
else
return 0;
end if
end
$$
language plpsql
----Test Function----
select * from login('Admin','admin')

当我按下保存按钮时,会显示此消息

错误:语法错误在"处或附近;创建";第6行:创建表用户

除了前面提到的缺少语句终止符(;(之外,您的脚本还有一个致命错误,insert语句将失败。为什么?由于您没有列出要插入的列名,的值必须包括每个列(包括id(,并且它们必须按照定义的顺序。除非指定要插入的列(或在适当位置使用默认关键字(,否则不能有自动递增列且不指定其值。所以你需要

insert into users(email, password) values('arsa', '1234');
insert into users values(default, 'abc', 'def');

您的功能的目的似乎不是按照名称所暗示的那样执行登录,而是验证凭据。在这种情况下,您可以将其简化为一条SQL语句。没有计数,没有计数检查,只有一次选择(是的,有子选择(:

create or replace 
function is_valid_user(_email character varying
,_password character varying
)
returns boolean  
language sql 
as $$
select exists (select null 
from users 
where email = _email 
and password = _password
); 
$$;  

请参阅演示。

如果你真的需要一个触发器,你也需要一个触发功能和一个表上的触发器

最新更新