Postgresql 为什么在pgadmin 4中创建触发器时出错

Postgresql 为什么在pgadmin 4中创建触发器时出错,postgresql,Postgresql,在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 funct

在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语句。无计数,无计数检查,只需一次选择(是,带有子选择):


如果您确实需要一个触发器,那么表本身也需要a和a,因为错误显示:
第6行:create table users
我想说原因是第6行之前的某个内容。另外,因为我没有看到任何以
结尾的语句(创建表除外)我要冒险说,在
创建表之前,有一条语句没有显示。
语句没有正确地以
结尾。仅供参考,在函数语句中,需要用
终止不是
。除了Adrian写的:我在代码中没有看到任何与触发器相关的内容,我已经将:改为;但是这个错误并没有被修复,我在创建表之前没有任何语句。这个错误认为是这样的,它从某处得到了第6行。最好的猜测是,在运行上述程序时使用的任何语句的缓冲区中都有一些语句。您还需要添加
到其他语句,否则当脚本到达它们时,您将得到错误。
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
                  ); 
$$;