2017-09-26 856 views
0

我有触发/序列的问题PostgreSQL的PostgreSQL的错误:关系不存在

当我尝试INSERT在我的表res_letterbox我有这样的错误:

ERROR: relation "res_id_mlb_seq" does not exist
LINE 1: SELECT nextval('res_id_mlb_seq') QUERY: SELECT nextval('res_id_mlb_seq') CONTEXT: PL/pgSQL function users_test.trigger_fct_t_res_letterbox_ins() line 5 at SQL statement

********** Error **********

ERROR: relation "res_id_mlb_seq" does not exist SQL state: 42P01
Context: PL/pgSQL function users_test.trigger_fct_t_res_letterbox_ins() line 5 at SQL statement

我试图设置直接在列RES_ID的defaut值: NEXTVAL( 'res_id_mlb_seq' :: regclass的),它返回我:

ERROR:relation "res_id_mlb_seq" does not exist

-

CREATE SCHEMA users_test; 
ALTER SCHEMA users_test OWNER TO users_test; 

SET search_path = users_test; 

CREATE TABLE res_letterbox (
     res_id bigint, 
    title varchar(255) DEFAULT 'NULL', 
    ... 
    .. 
); 

CREATE SEQUENCE res_id_mlb_seq INCREMENT 1 MINVALUE 1 NO MAXVALUE START 12602; 

DROP TRIGGER IF EXISTS t_res_letterbox_ins ON res_letterbox CASCADE; 
CREATE OR REPLACE FUNCTION trigger_fct_t_res_letterbox_ins() RETURNS trigger AS $BODY$ 
BEGIN 
    BEGIN 
     SELECT nextval('res_id_mlb_seq') 
     INTO NEW.res_id; 

EXCEPTION 
    WHEN OTHERS 
    THEN 
     RAISE; 
    END; 
RETURN NEW; 
END 
$BODY$ 
LANGUAGE 'plpgsql'; 

CREATE TRIGGER t_res_letterbox_ins 
    BEFORE INSERT ON res_letterbox FOR EACH ROW 
    EXECUTE PROCEDURE trigger_fct_t_res_letterbox_ins(); 

ALTER SEQUENCE IF EXISTS res_id_mlb_seq RESTART WITH 12603; 
+0

BTW您可以通过将列定义为bigserial来避免触发器+函数。 (+也许setval()) – joop

回答

0

你创建不知道它是应该找到序列功能在users_test架构中。

CREATE OR REPLACE FUNCTION trigger_fct_t_res_letterbox_ins() RETURNS trigger AS $BODY$ 
BEGIN 
    BEGIN 
     SELECT nextval('res_id_mlb_seq') 
     INTO NEW.res_id; 

EXCEPTION 
    WHEN OTHERS 
    THEN 
     RAISE; 
    END; 
RETURN NEW; 
END 
$BODY$ 
LANGUAGE 'plpgsql' 
SET search_path = 'users_test'; 

创建函数文档:

您可以通过指定search_path当您创建函数来进行调节。

https://www.postgresql.org/docs/9.3/static/sql-createfunction.html

0

你应该从功能使用全名(与模式): SELECT nextval('users_test.res_id_mlb_seq')

+0

谢谢我也使用它! – Reveur

相关问题