Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wSN7o-0038l5-2U for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 22:53:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wSN7m-009teJ-2a for pgsql-hackers@arkaria.postgresql.org; Wed, 27 May 2026 22:53:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wSN7m-009te4-1X for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 22:53:19 +0000 Received: from mail-yw1-x112d.google.com ([2607:f8b0:4864:20::112d]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wSN7k-00000001lP6-3L3r for pgsql-hackers@lists.postgresql.org; Wed, 27 May 2026 22:53:19 +0000 Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-7cfc382d896so72369307b3.3 for ; Wed, 27 May 2026 15:53:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779922395; cv=none; d=google.com; s=arc-20240605; b=I0Kwqr1gsk3kcNki3xz/rbhlR4Me0+ZzKYrYYH7klbiNWWoOeBDSvqdRrSnREO15DJ mgS7OpRXYXNsKr8/scmi4KlIVUkVJwX4ocr4FarLHKeQm4j/sfKfyTzgB0dd61GmC2O6 zsClxJeQohLAJnUZjjFVA37RBMHSpTkVtvtIyt5N0nhRZfqq2yCoZNUmwtg1pga8nA8W 1FnSqn2E0feYvH/xOqHjOkqxG72qXVhGw1rffK+EBX2Ivrrelv4bT2ly1irRDejP14Cp ZnRN8AWkeQm1ipPuUuuSU3wfDOxl4qGLbqfE2GF+c+zdzROGXpW+mfTgtMxZKoT2jpkc 6KJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :dkim-signature; bh=X4dHghsU4Lkmwh4fIxzxO/Z+sEZnqP1fvnJqgFarLR4=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=SgGoe7SilLaMRgIyxk8Ghl5VTaZ8jKgMiPpTI5UkZ+osAPMbEyuWNjj9mRVT3QXuS1 SeG1aCM/AlfJtGn8tFqgL5vAUDATdhgDfH3sTUEEwgY5H3E49rr9/ORCwkj5ySXCcy03 E70PL9JcOS3uKHRzqC+SnORiwTSUHSfdH5e75pMIJkx0htnlK9hOh65pSMANE4nuZAg7 C6iVRzY8PicrMeWvgjLzQf25Z9QKF3DLXzQ6Tyk8dBSMIDMdTLhW6SmTZF62mDkHMat9 etUBFz4HEGgD7Ln01udztZxQeCyCfq7PN0pLncU4UytstkNKvW1StAnea2XHSwnGBVPu lEsA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=percona.com; s=google; t=1779922395; x=1780527195; darn=lists.postgresql.org; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :from:to:cc:subject:date:message-id:reply-to; bh=X4dHghsU4Lkmwh4fIxzxO/Z+sEZnqP1fvnJqgFarLR4=; b=FObNkd48C1fG8SaqHaNArW8IIx5RChtAUEkrEQlIlJ7SLeIv/ED/q+nx+idcCa9hyi DNvC7mqrheYoi93R09x5m9E7uPViAnhTARgNRhj6FZI1kZepw/9+5LsqP0jbz38Qoi/D wzk8s7VoL04pbOZpZXTe7djTxhCa2dwr9Ig4Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779922395; x=1780527195; h=to:subject:message-id:date:mime-version:references:in-reply-to:from :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=X4dHghsU4Lkmwh4fIxzxO/Z+sEZnqP1fvnJqgFarLR4=; b=jmNBujgPJn5Awa4PGIRffBy3Yp55H8AS7ttLT/5lB9ZHYcO3gKoQZ1PuA7f9bue7so ezpCj5IhjTU1NNRG5GshO303SWUTxsrlP2gIx7NacEXoQHgWyF/k4irtTt7+Wjtakmo6 wSPI6JTExI+y0n4gUOY6BgC/pND2MWcPi/VDLTm679S4up/3zjIqlRmeyklLpxGpUEgR sVRZ+MuEXzVP49NVeBqBQSL9YrUCnawaigbHTiOBkRAH6Di5y5Q/mH6dwRdkEWHoONnE 3TR58BqWuIOHatT6WCWhEhi+YFoyPpsJ8X46BOXjLTjD5cPpmwlhGSBcN1U1yGZx0KAr UXiA== X-Gm-Message-State: AOJu0YxhtLimcyn3xAWAVfKp9gonXHNrw/+6najTQ/kmwmXZMmckVO81 +Ha0NM8o6AB/ZjaIUNuFf7RD3Nk/0jlBiNMapdidzHqATki7ucENzPrNiTE8gOhmRbUS004Wb0c uPn2c5Ip4T0xtpmBUWq4zcgJNFrGZGEb70udab0e9wDMZYvFIQq4PNZNOtS0wevn2gYJB8kjXdP 11jFvCeG90nOAHwBssK8Yd3mFbxdqMa0aUsTeNe5P7oBp9jLAxJ8QedErheOKLANfQAeHsBEYlK 2itcDjH8Kq5bBfjGu67a6JYnkPc9LOfXGr0DEp7ejWxu26DirMFoqHHv1R6bMPkme56G9BQNcqE og== X-Gm-Gg: Acq92OEPLZUK/YY9IztDh4OTXf1bk5cU7QqC5yUbfDEwCVrVDpecvXLi4zVIOm0ZRw2 VV72ITtPUE/fT4Ier0jkgeKlKD2j4mwrJzWfy1EXFmi08VEeXMkrSeFVuBpocLtQKQbmrEmtkL8 mCfLi3+UTToOFxQO75otkZssFsZA89J52WZaX59OJLxgQeNOCi1TkkuSOkT3eUEQr6fjYyjE9a0 5ftSUKBQEhVluxHrc+VlPOeQWekIT2q7ItOmoC7fy2708hurXswXERdlb71Dm7PuR4Tc6C8etBD 9ShlNoS1Rt6WhPkg+222bfn551Ihg/oBiyDPbO4Uy55pofe7tfGdMGTsimErf2KDkMDal38pko+ LpmUO9pBPlxaF0g== X-Received: by 2002:a05:690c:45c6:b0:7bd:a4dc:c26d with SMTP id 00721157ae682-7d338393a2fmr286747407b3.41.1779922394923; Wed, 27 May 2026 15:53:14 -0700 (PDT) Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Wed, 27 May 2026 15:53:13 -0700 Received: from 298783833264 named unknown by gmailapi.google.com with HTTPREST; Wed, 27 May 2026 15:53:13 -0700 From: Zsolt Parragi In-Reply-To: References: MIME-Version: 1.0 Date: Wed, 27 May 2026 15:53:13 -0700 X-Gm-Features: AVHnY4Kbri6MUKXYgQVPQCgyflSD9P33wKHDHccnSnrZmAa7NYrAP5bAb24cApA Message-ID: Subject: Re: CREATE TABLE LIKE INCLUDING TRIGGERS To: pgsql-hackers@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" X-CLOUD-SEC-AV-Sent: true X-CLOUD-SEC-AV-Info: percona,google_mail,monitor X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hello! Sorry for the late reply, somehow I missed the previous updates. I found one more problematic scenario, I think the patch should ignore INSTEAD OF triggers: CREATE TABLE base (id int, val text); CREATE VIEW v_instead AS SELECT id, val FROM base; CREATE FUNCTION v_instead_ins() RETURNS trigger LANGUAGE plpgsql AS $$ BEGIN INSERT INTO base VALUES (NEW.id, NEW.val); RETURN NEW; END; $$; CREATE TRIGGER v_instead_trg INSTEAD OF INSERT ON v_instead FOR EACH ROW EXECUTE FUNCTION v_instead_ins(); -- currently fails -- ERROR: "t_all" is a table -- DETAIL: Tables cannot have INSTEAD OF triggers. CREATE TABLE t_all (LIKE v_instead INCLUDING ALL); And also, either I don't understand something here, or the diff can be simplified a bit: - /* Transform expression. Copy to be sure we don't modify original */ - whenClause = transformWhereClause(pstate, - copyObject(stmt->whenClause), - EXPR_KIND_TRIGGER_WHEN, - "WHEN"); - /* we have to fix its collations too */ - assign_expr_collations(pstate, whenClause); + if (stmt->transformed) + whenClause = stmt->whenClause; + else + { + /* Transform expression. Copy to be sure we don't modify original */ + whenClause = transformWhereClause(pstate, + copyObject(stmt->whenClause), + EXPR_KIND_TRIGGER_WHEN, + "WHEN"); + + /* we have to fix its collations too */ + assign_expr_collations(pstate, whenClause); + + stmt->transformed = true; + } Do we need the last assignment in this diff? It sets stmt->transformed, but we don't actually transform the statement, we create a copy. The flag also doesn't seem to be used after that. Everything seems to work fine if I remove this assignment, and we don't need the const related function signature changes without it.