我正在学习PostgreSQL中的触发器。
我创建了一个触发器函数update_name()
:
CREATE OR REPLACE FUNCTION update_name()
RETURNS trigger AS
$BODY$
BEGIN
NEW.name := "ankit";
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_name()
OWNER TO postgres;
我的表user_table
是:
CREATE TABLE user_table (
name character varying(20) NOT NULL,
password character varying(20),
email character varying(20),
gender character varying(20),
phone bigint,
CONSTRAINT user_table_pkey PRIMARY KEY (name)
);
并且该表的触发器是:
CREATE TRIGGER "change-name"
BEFORE INSERT OR UPDATE
ON user_table
FOR EACH ROW
EXECUTE PROCEDURE update_name();
当我使用query:
将数据插入到我的表中时INSERT INTO user_table(name, password, email, gender, phone)
VALUES ('aa', '9874', 'poi@ka.in', 'male', 8978987896);
我收到了错误:
ERROR: column "ankit" does not exist LINE 1: SELECT "ankit" ^ QUERY: SELECT "ankit" CONTEXT: PL/pgSQL function update_name() line 3 at assignment ********** Error ********** ERROR: column "ankit" does not exist SQL state: 42703 Context: PL/pgSQL function update_name() line 3 at assignment
我做错了什么?
答案 0 :(得分:1)
这是关于PostgreSQL语法的。我从问题中删除了对pgAdmin的无关引用。
在Postgres中,文字值(常量)用单引号括起来:'value'
双引号是为标识符保留的,但只要包含合法的小写字母,就可以选择:"Odd Name"
与odd_name
。
这也是SQL标准。首先阅读章节"Lexical Structure" in the manual。
答案 1 :(得分:0)
ERROR改变了:
NEW.name := "ankit";
到
NEW.name := 'ankit';
为什么会这样?
答案 2 :(得分:-1)
CREATE OR REPLACE FUNCTION update_name()
RETURNS trigger AS
$BODY$
BEGIN
RAISE NOTICE 'RECORD IS INSERTED %',NEW.name;
INSERT INTO user_table VALUES("ankit",NEW.password,NEW.email,NEW.gender,NEW.phone);
RETURN NEW;
end if;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update_name()
OWNER TO postgres;
试试这个会对你有帮助。