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 1wWqoh-002tgT-2B for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jun 2026 07:24:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wWqof-005edW-1e for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Jun 2026 07:24:05 +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 1wWqof-005edO-0j for pgsql-hackers@lists.postgresql.org; Tue, 09 Jun 2026 07:24:05 +0000 Received: from mail-ua1-x931.google.com ([2607:f8b0:4864:20::931]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wWqoc-000000026vr-40qW for pgsql-hackers@lists.postgresql.org; Tue, 09 Jun 2026 07:24:04 +0000 Received: by mail-ua1-x931.google.com with SMTP id a1e0cc1a2514c-963b04fd87aso2046268241.0 for ; Tue, 09 Jun 2026 00:24:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780989841; cv=none; d=google.com; s=arc-20240605; b=YqDbcoXnY//O/zM2Hk1iapbFvkkJrs4j7+2E/C3MqFTonC7PuQoH33+aESL5g5bXJi 1HuJP0HZ8PKKoXhEvt9kyB/JQFw5fROu3gxiOhSEOMre7NW+WteMPn2je7efE2f/H0CO VzCnTEVRRlwVNnWQZjPA43ti3i5ywBH3RoEoa1URn3Six1834KN06FXrq28nIX3F1XnD MmwFSpjvxRlPV+naXdPFN1P/SQAws1JFmEjq8mE8QCctES7f7PeirBz2ka2ueoNuOVuB wtb6DBIR/aEFvlPFJAp9yrv/YEj5B1kOeOJGrEC51RXkqtEoRzLoNNcqy4IhB9j6JHqS Mo7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=XF84eUikP7MHDH+A5AYsdGvcqPZrgBofYu9d46ji06E=; fh=3Zg32FjVfZIcn5C1NaDlJDTeCB8Ter09hWDNWAB1s7w=; b=JWGQD5Bq8gjZUvBCbBmJzNDlCuFC6ya/5kf2AFiClLeUFTzqyi3BTvRT/iT0HJMASN FkYc7k7T+0mOWSBIO2iOJ9CCzVhPn0Ov3t72Ys234JIXz5rt9A5w90wVfHR+fsMkfRjV 9lKc0dIxCTHeuREyQ7/FyoGo+pgiwDZM3kArbMAyMTJlddBcYVcPNrIlpFn2ONWFYa0t ZUUXaU1hHGMGy+v6d4K33XqTdnEvMefyZJXPpdTgW/YoLN7Q3/EUqkA/WynzQullMf49 ug2s7aqmuiIvcJ6FRuOFtCWGNfNkSFIUr1iYLMHWjTLty0i6UosNkYixZLzKI8MwFnH8 tqSA==; 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=gmail.com; s=20251104; t=1780989841; x=1781594641; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=XF84eUikP7MHDH+A5AYsdGvcqPZrgBofYu9d46ji06E=; b=VUg87BE8q92gNegbuS6isxyc9LGGsCZVPJbo7q1RKBb9Z8qcmjQW4vPaXAoKbFd6Td VZPVE8Fy8Q2O/yv6gb8fglJv+Hk0whnwDt8qlMfJogoegLstIQQ8b0a4odfVcPZQMXzu PE+zqDbZd1BLNEM9Y0+wcu1rnw+e0yg6TLrp7gMHDPIDYQikwdOwWi4qGj10hXsldA61 yj2dw3DUZqs+5KomFDrIGv8CHw+LbpgiKPao2nYm6ItS/lhFkQHZz9RVr283C8nSHGa3 lhGnQRP0e1AXTD3CoBdCMSViLtfbfwRM2hyrSrFiU5nAbFJj4+4SaByTudzvb8zw/qP9 VWWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780989841; x=1781594641; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=XF84eUikP7MHDH+A5AYsdGvcqPZrgBofYu9d46ji06E=; b=nnKlMvujwsb2927rRVUX4OuAb/q6P6pSTfA52vTzyvH76ReKrGVXKdTQV7J2BLXEA/ LM9HMaiFycc7nbYGjcUMfieudMOnAWvaRS0t3b/74dv3UBkDPQItAX/ZbFnwBvybC5C7 4i3U/33Cp2t6FEFZoLeHJifXzYELHFpBBP69BsI4NdVhKNKI+6Dx/UGBQwmZ5K1apIOp Oo0gmSE8p9pJ2Vs6T47cKwpPpHu2FwpgmBxotZruVkkQX7lQlKgTv/6y73M9qHcLgZl8 WBgZePeNBZHzqx5x5Txu57nIXU+pN4QcxC88/c5jVoLhexjc5lmHrIanHJK0JASeDWpT Rx5w== X-Gm-Message-State: AOJu0YxEMR+YbTfzqrVM/uqi0o0MTXvy61WyKGseHCN5QBnsGvQJKZM+ zEFOJoCfgaQ2nRxZgk3nR9tEeA80vVCPIddqpxTvAKyyAvXyVIfUGJKHQNKVK67S9NqgFcER3g2 fvi1rYWaL2m+f3NjjSsRcX/A47DKwPzE= X-Gm-Gg: Acq92OHSZBfo5P56BZbTW89rvAXx+oKe41lONlPUfEt1uZJ5RWbFS+WfBKpseKwP1Ux kkHq7yAT/icO+Nx4lC/EsYb2DMzUzr2RUhcZ9mE1anmxmFSTvjDoKHZO3jiJA0OJN359rQV0JkL 2WUb8wVc4qt4kW/qwuzlUJ88Dc5J6grrK78BzwCH6m0wrxhvQuQJCBCkatjOyXvu0svMJYuzxLC wKJJ/YWUCrndOsEjUFbENF1WYKtXeYyisjzK2PQCykDEG/1qBur6YPdjG5GALi7OFKzh0UIDIfy rQpv9SOgIphAfmhZ2LYiYY9m5y+AdZjY1EvBRLW7/BgWtsoBQh9WCLU+L+b3hK9Jn8Wq2RSa24/ 3HPNbSWMBQRYIyTX3qjuy/qZIBMHQFWSBvbNfZ6c1Uo9X5ojmhQZC4u6lF5uggjQUGowGpwHd18 oIuxiYyyhQxmV8OzczDUfpsMuzvcE8KTRAbjey4Hk3IkVhplo= X-Received: by 2002:a05:6102:fa0:b0:611:e0c2:1604 with SMTP id ada2fe7eead31-719367de123mr513180137.19.1780989840925; Tue, 09 Jun 2026 00:24:00 -0700 (PDT) MIME-Version: 1.0 References: <71242FEA-15A3-4073-9FA1-561CA744ACBD@gmail.com> In-Reply-To: <71242FEA-15A3-4073-9FA1-561CA744ACBD@gmail.com> From: jian he Date: Tue, 9 Jun 2026 15:23:24 +0800 X-Gm-Features: AVVi8CfjZhkxlBPBSEqf7-RDxcfJeJs4W3em6w8caMSB9qePDInZGkc6ojGf2wM Message-ID: Subject: Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies To: Chao Li Cc: Postgres hackers , Peter Eisentraut Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Tue, Jun 9, 2026 at 2:23=E2=80=AFPM Chao Li wro= te: > > Hi, > > While testing =E2=80=9C[f80bedd52] Allow ALTER COLUMN SET EXPRESSION on v= irtual columns=E2=80=9D, I found that the feature missed handling whole-row= check constraints. > > Here is a repro: > ``` > evantest=3D# create table t( > evantest(# a int, > evantest(# b int generated always as (a*2) virtual, > evantest(# constraint row_c check (t is not null) > evantest(# ); > CREATE TABLE > evantest=3D# insert into t(a) values(1); > INSERT 0 1 > evantest=3D# alter table t alter b set expression as (nullif(a, 1)); > ALTER TABLE > evantest=3D# select * from t; > a | b > ---+--- > 1 | > (1 row) > ``` > > The ALTER TABLE should fail, because it makes b become NULL, which breaks= the constraint row_c. > Hi. In case you are wondering whole-row objects: ALTER TABLE DROP COLUMN and ALTER COLUMN SET DATA TYPE are covered by https://commitfest.postgresql.org/patch/5988 and https://commitfest.postgresql.org/patch/6055. Meanwhile, ALTER TABLE SET EXPRESSION is being handled over in https://commitfest.postgresql.org/patch/6755