Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m82M7-0005tx-9x for pgsql-novice@arkaria.postgresql.org; Mon, 26 Jul 2021 15:17:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m82M6-0000Ud-6m for pgsql-novice@arkaria.postgresql.org; Mon, 26 Jul 2021 15:17:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m82M5-0000UU-Ua for pgsql-novice@lists.postgresql.org; Mon, 26 Jul 2021 15:17:22 +0000 Received: from mout02.posteo.de ([185.67.36.66]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m82M2-0001eI-Gz for pgsql-novice@lists.postgresql.org; Mon, 26 Jul 2021 15:17:20 +0000 Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id 5A3DE240101 for ; Mon, 26 Jul 2021 17:17:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1627312634; bh=FXEcO8foIfuVwNREqdeso/ufaAhGCig2Xl6/0ooWLDk=; h=From:To:Subject:Date:From; b=Omfa/J9r78l3KF1BGxhuSDPB07aorAoRqZt13LSbufRVFi/Em92s6uIGOnK3arBIK d9N7ZuooZehFBkXvPbLje7nVPJFUBDN0M02pX1+gEfvfEJwzpj3gQkfdEUYGjZpybm 2/a1TlmcRA8I5ztCYpTshHLf1sDwkCZ4m0fpuVc5qLgN0fM26f5LMbT0ToNP+FkmRG 8Qn49UBE3HqI/yzHoLWWXtK0AeYuHX2TcCw7m81e9iJEMkxMNQgiaWL6yw+cHCzoU/ y2n5xRES34/qJ3AGJppNqHActF41pS0TEFUkf5nz4agRkzOMpXbg3wimT44pBIggwR DyGHP/U/Bl7Iw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4GYNnj38WJz6tmN for ; Mon, 26 Jul 2021 17:17:13 +0200 (CEST) From: "Nicolas Mitchell" To: pgsql-novice@lists.postgresql.org Subject: Trigger function Date: Mon, 26 Jul 2021 15:17:12 +0000 Message-ID: <30B8A3D0-8A87-40E2-BE40-31A17BA4B944@posteo.net> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, I have a set of tables, ‘object’, ‘obtype’, ‘host’ and domain: CREATE TABLE "domain" ( "id" INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1000001 INCREMENT BY 1), "name" VARCHAR(64) NOT NULL, CONSTRAINT "domain__id__pk" PRIMARY KEY ("id") ); CREATE TABLE "obtype" ( "id" INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 2800001 INCREMENT BY 1), "name" VARCHAR(16) NOT NULL, CONSTRAINT "obtype__id__pk" PRIMARY KEY ("id") ); CREATE TABLE "host" ( "id" INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 2900001 INCREMENT BY 1), "name" VARCHAR(32) NOT NULL, "domain" INTEGER NOT NULL, "object" INTEGER NOT NULL, CONSTRAINT "host__id__pk" PRIMARY KEY ("id") ); CREATE TABLE "object" ( "id" INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 3200001 INCREMENT BY 1), "type" INTEGER NOT NULL, CONSTRAINT "object__id__pk" PRIMARY KEY ("id") ); ALTER TABLE "domain" ADD CONSTRAINT "domain__name__uk" UNIQUE ("name"); ALTER TABLE "obtype" ADD CONSTRAINT "obtype__name__uk" UNIQUE ("name"); ALTER TABLE "host" ADD CONSTRAINT "host__name_domain__uk" UNIQUE ("name","domain"); ALTER TABLE "host" ADD CONSTRAINT "host__object__uk" UNIQUE ("object"); ALTER TABLE "host" ADD CONSTRAINT "host__object__fk" FOREIGN KEY ("object") REFERENCES "object" ("id") ON DELETE CASCADE; ALTER TABLE "host" ADD CONSTRAINT "host__domain__fk" FOREIGN KEY ("domain") REFERENCES "domain" ("id") ON DELETE RESTRICT; ALTER TABLE "object" ADD CONSTRAINT "object__type__fk" FOREIGN KEY ("type") REFERENCES "obtype" ("id") ON DELETE RESTRICT; I am looking at whether functions can help me automate creating a new object when a new host is added. I can do this manually with the following code: WITH object_id AS (INSERT INTO public.object (type) VALUES ( ( SELECT obtype.id FROM public.obtype WHERE obtype.name LIKE 'host' ) ) RETURNING id) INSERT INTO host (name, domain, object) VALUES ('gary', 1000001, (SELECT * FROM object_id)); I have a number of questions but I would like to begin by asking whether this a candidate for a trigger function on table ‘host’, triggered before an insert? Many thanks, NicM