在下表中,影片表是显示表的子类。 对于插入(通过网络界面)表格节目的每一个新行,我想在电影中插入一行: 例如,
INSERT INTO shows title VALUES ('title');
这将在节目中添加一个新行,其中 showid =下一个值,并且title =' title' ... 我想要的是获得 showid 值(来自节目)并将其插入电影表中的新行。
我该怎么做?
CREATE SEQUENCE shows_showid_seq;
CREATE TABLE "shows" (
"showid" BIGINT NOT NULL PRIMARY KEY DEFAULT nextval('shows_showid_seq'),
"title" TEXT NOT NULL,
"rating" BIGINT,
"language" TEXT,
"genre" TEXT
);
CREATE TABLE "films" (
"showid" BIGINT NOT NULL CONSTRAINT films_showid
REFERENCES shows("showid") ON DELETE SET NULL,
"year" INT, "reldate" DATE
);
答案 0 :(得分:0)
因此,如果我正确理解了您的问题,那么您希望在插入节目后自动插入电影。
所以你首先要做的是写一个FUNCTION
来处理插入操作(参考:https://www.postgresql.org/docs/9.1/static/sql-createfunction.html)
然后写一个TRIGGER
,在给定事件发生时执行该函数(参考:https://www.postgresql.org/docs/9.1/static/sql-createtrigger.html)
引用另一个包含函数示例的帖子How to insert data into table using stored procedures in postgresql
另一个SO参考更全面,包括一个TRIGGER和一个FUNCTION,Postgresql: Creating a Trigger。
这应该足以帮助你拼凑一些东西。即将走出家门,否则我会四处游玩并写出来,我当然可以使用这种做法。但我希望这足以帮助你朝着正确的方向前进。
答案 1 :(得分:0)
这是我最终做的事情:
arguments[i]
要插入我投放的新电影:CREATE FUNCTION add_movie(movie_title TEXT, movie_overview TEXT) RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
current_showid BIGINT;
BEGIN
INSERT INTO shows (title, overview) VALUES (movie_title, movie_overview) RETURNING showid INTO current_showid;
INSERT INTO films (showid) VALUES (current_showid);
END;
$$;