{"id":6068,"date":"2020-10-20T14:21:59","date_gmt":"2020-10-20T05:21:59","guid":{"rendered":"https:\/\/www.lancard.com\/blog\/?p=6068"},"modified":"2025-03-12T11:25:25","modified_gmt":"2025-03-12T02:25:25","slug":"postgresql%e3%81%aetrigger%e5%82%99%e5%bf%98%e9%8c%b2","status":"publish","type":"post","link":"https:\/\/www.lancard.com\/blog\/2020\/10\/20\/postgresql%e3%81%aetrigger%e5%82%99%e5%bf%98%e9%8c%b2\/","title":{"rendered":"PostgreSQL\u306eTRIGGER\u5099\u5fd8\u9332"},"content":{"rendered":"\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\nPostgreSQL\u306eTRIGGER\u306f\u6ec5\u591a\u306b\u4f7f\u308f\u306a\u3044\uff1e\u5fd8\u308c\u3066\u3057\u307e\u3063\u3066\u3044\u305f\u306e\u3067\u601d\u3044\u51fa\u3059\u306e\u3092\u517c\u306d\u3066\u5099\u5fd8\u9332\u3068\u3057\u307e\u3059\u3002\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n\u4eca\u56de\u306f\u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u3057\u3066\u306e\u8ffd\u52a0\u66f4\u65b0\u524a\u9664\u6642\u306e\u30c7\u30fc\u30bf\u3092\u3001\u30ed\u30b0\u30c6\u30fc\u30d6\u30eb\u306b\u4e38\u3054\u3068\u4fdd\u5b58\u3059\u308b\u4f8b\u3067\u3059\u3002\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n\n<!--more-->\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<hr>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n\u53c2\u8003\u60c5\u5831\u306f\u4ee5\u4e0bURL\u3002<br><a rel=\"noreferrer noopener\" href=\"https:\/\/www.postgresql.jp\/document\/9.6\/html\/plpgsql-trigger.html\" target=\"_blank\">https:\/\/www.postgresql.jp\/document\/9.6\/html\/plpgsql-trigger.html<\/a>\n<\/div><\/div>\n\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n\u307e\u305apostgres\u7b49\u306e\u30b9\u30fc\u30d1\u30fc\u30e6\u30fc\u30b6\u3067CREATE LANGUAGE\u3002\n<\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE LANGUAGE plpgsql;\nSELECT * FROM pg_language WHERE lanname = 'plpgsql'; --\u78ba\u8a8d<\/code><\/pre>\n<\/div><\/div>\n\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n\u4ee5\u964d\u306f\u30b9\u30fc\u30d1\u30fc\u30e6\u30fc\u30b6\u30fc\u306e\u5fc5\u8981\u306f\u7121\u3044\u306e\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30aa\u30fc\u30ca\u30fc\u304c\u5b9f\u65bd\u3002\n\n\n\n\u30c6\u30b9\u30c8\u7528\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210\u3002\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE public.tb(\n   id serial NOT NULL,\n   note text,\n   create_time timestamp without time zone NOT NULL DEFAULT now(),\n   CONSTRAINT tb_pkey PRIMARY KEY (id)\n);<\/code><\/pre>\n\n\n\n\u30ed\u30b0\u4fdd\u5b58\u7528\u30b9\u30ad\u30fc\u30delogs\u3092\u4f5c\u6210\u3057\u3066\u3001\u305d\u3053\u306b\u30ed\u30b0\u7528\u30c6\u30fc\u30d6\u30eb\u3092\u8ffd\u52a0\u3002\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE SCHEMA logs;\n\nCREATE TABLE logs.log_tb AS\n SELECT 0::bigint AS log_id,''::text AS oper,null::timestamp without time zone AS copy_time,*\n FROM public.tb WHERE id = 0;\nCREATE SEQUENCE logs.log_tb_log_id_seq;\nALTER TABLE logs.log_tb ADD PRIMARY KEY (log_id);<\/code><\/pre>\n\n\n\n\u30c8\u30ea\u30ac\u95a2\u6570\u3092\u5b9a\u7fa9\u3002\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE OR REPLACE FUNCTION public.tb_copy() RETURNS trigger AS\n$BODY$\n BEGIN\n   IF (TG_OP = 'DELETE') THEN\n     INSERT INTO logs.log_tb SELECT nextval('logs.log_tb_log_id_seq'::regclass),TG_OP,now(),* FROM public.tb WHERE id = OLD.id;\n     RETURN OLD;\n   ELSE\n     INSERT INTO logs.log_tb SELECT nextval('logs.log_tb_log_id_seq'::regclass),TG_OP,now(),* FROM public.tb WHERE id = NEW.id;\n     RETURN NEW;\n   END IF;\n END;\n$BODY$\nLANGUAGE plpgsql VOLATILE;<\/code><\/pre>\n\n\n\n\u30c8\u30ea\u30ac\u3092tb\u306b\u4ed5\u639b\u3051\u308b\u3002\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TRIGGER tb_change AFTER INSERT OR UPDATE ON public.tb FOR EACH ROW EXECUTE PROCEDURE public.tb_copy();\nCREATE TRIGGER tb_delete BEFORE DELETE ON public.tb FOR EACH ROW EXECUTE PROCEDURE public.tb_copy();<\/code><\/pre>\n<\/div><\/div>\n\n\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n\u6700\u5f8c\u306b\u3001\u30c7\u30fc\u30bf\u3092\u64cd\u4f5c\u3057\u3066\u30ed\u30b0\u304c\u53d6\u308c\u308b\u304b\u3092\u78ba\u8a8d\u3002\n\n\n\n<pre class=\"wp-block-code\"><code>INSERT INTO public.tb(note) VALUES('TEST');\nINSERT INTO public.tb(note) VALUES('TEST2');\nUPDATE public.tb SET note = 'UPDATE TEST';\nDELETE FROM public.tb;\nSELECT * FROM logs.log_tb;<\/code><\/pre>\n<\/div><\/div>\n\n\n\n\n\u3053\u308c\u3067INSERT, UPDATE, DELETE\u306e\u30ed\u30b0\u304c\u305d\u308c\u305e\u308c2\u4ef6\u305a\u3064\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3002<br>\n\u203blog_id\u3084id\u304c\u5897\u52a0\u3057\u3066\u308b\u306e\u306f\u3001\u4f55\u5ea6\u304b\u8a66\u3057\u305f\u306e\u3067\u3002<br>\n\u203b\u6642\u9593\u304c\u4e00\u7dd2\u306a\u306e\u306f\u4e00\u62ec\u5b9f\u884c\u306e\u7d50\u679c\u306a\u306e\u3067\u3001\u4e00\u884c\u305a\u3064\u5b9f\u884c\u3059\u308c\u3070\u7570\u306a\u308b\u3002<br>\n\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"183\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/uploads\/2020\/10\/image-602x183.png\" alt=\"\" class=\"wp-image-6072\" srcset=\"https:\/\/www.lancard.com\/blog\/wp-content\/uploads\/2020\/10\/image-602x183.png 602w, https:\/\/www.lancard.com\/blog\/wp-content\/uploads\/2020\/10\/image-400x122.png 400w, https:\/\/www.lancard.com\/blog\/wp-content\/uploads\/2020\/10\/image.png 710w\" sizes=\"auto, (max-width: 602px) 100vw, 602px\" \/><\/figure>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-facebook nolightbox\" data-provider=\"facebook\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Facebook\" href=\"https:\/\/www.facebook.com\/sharer.php?u=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068&#038;t=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2&#038;s=100&#038;p&#091;url&#093;=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068&#038;p&#091;images&#093;&#091;0&#093;=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-content%2Fuploads%2F2020%2F10%2Fimage-602x183.png&#038;p&#091;title&#093;=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"Facebook\" title=\"Share on Facebook\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/facebook.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"http:\/\/twitter.com\/share?url=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068&#038;text=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068&#038;title=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-tumblr nolightbox\" data-provider=\"tumblr\" target=\"_blank\" rel=\"nofollow\" title=\"Share on tumblr\" href=\"https:\/\/tumblr.com\/share?s=&#038;v=3&#038;t=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2&#038;u=https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"tumblr\" title=\"Share on tumblr\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/tumblr.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=PostgreSQL%E3%81%AETRIGGER%E5%82%99%E5%BF%98%E9%8C%B2&#038;body=%E3%82%B7%E3%82%A7%E3%82%A2%E3%81%99%E3%82%8B%EF%BC%9A:%20https%3A%2F%2Fwww.lancard.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F6068\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/www.lancard.com\/blog\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>PostgreSQL\u306eTRIGGER\u306f\u6ec5\u591a\u306b\u4f7f\u308f\u306a\u3044\uff1e\u5fd8\u308c\u3066\u3057\u307e\u3063\u3066\u3044\u305f\u306e\u3067\u601d\u3044\u51fa\u3059\u306e\u3092\u517c\u306d\u3066\u5099\u5fd8\u9332\u3068\u3057\u307e\u3059\u3002 \u4eca\u56de\u306f\u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u3057\u3066\u306e\u8ffd\u52a0\u66f4\u65b0\u524a\u9664\u6642\u306e\u30c7\u30fc\u30bf\u3092\u3001\u30ed\u30b0\u30c6\u30fc\u30d6\u30eb\u306b\u4e38\u3054\u3068\u4fdd\u5b58\u3059\u308b\u4f8b\u3067\u3059\u3002<\/p>\n","protected":false},"author":17,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,1],"tags":[],"class_list":["post-6068","post","type-post","status-publish","format-standard","hentry","category-postgresql","category-1"],"_links":{"self":[{"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/posts\/6068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/comments?post=6068"}],"version-history":[{"count":39,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/posts\/6068\/revisions"}],"predecessor-version":[{"id":6108,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/posts\/6068\/revisions\/6108"}],"wp:attachment":[{"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/media?parent=6068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/categories?post=6068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lancard.com\/blog\/wp-json\/wp\/v2\/tags?post=6068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}