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 1wYzVh-000gOM-0D for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 05:05: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 1wYzVd-009lFy-1u for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Jun 2026 05:05:17 +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 1wYzVd-009lFq-0c for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 05:05:17 +0000 Received: from mail-qt1-x833.google.com ([2607:f8b0:4864:20::833]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wYzVa-00000000SVi-3TJL for pgsql-hackers@lists.postgresql.org; Mon, 15 Jun 2026 05:05:16 +0000 Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-517b1f2c668so33057921cf.2 for ; Sun, 14 Jun 2026 22:05:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781499912; cv=none; d=google.com; s=arc-20240605; b=D4HcW/JMyS9WtIod3fp2LzlGRhOvAW0bUDGDNUEcLlHrfwkQ5JD9vO/vdyA8X6Jrot LFDhAMlPYTJ4o9vTWLz9jwtG6lAFgi0G6iXFC2VZ85AyYPA8SRKIi2FyFNEvPubhclH/ ZqxxffOdJ8lPbCUHB6Uu7mME6KqoclGD8O3lTUaXYPewTJFkZTzovUOBCbuY8LSEyjq2 DrimjIe8Sd5hlzWMEd66qhUmQcoaziaPNNFKkprg5bmH+okXKK2vTSqC3Y9GU9Cb2J8Q aiG18A35AmIRvpRvgQe3noNKhq03fbfBHNKzOhTZI9YNAQ9Fl2dvstLsxGVZbYetTxA8 Z7hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=VMjTTTKidnJLxh8Wou9dp2d2hHJ/l3piLeUjCPvKFZs=; fh=f6ko/87wzVgjsa5A4TtWs2gcwDWyNnaBKsvHo2iTASM=; b=JA8+is9kS4gL9dY1zw+0oZ99xlCxPQow5TaeWmStXiHe4XiCYXoXfJIGFrwljyAkdd wHPFRm8dN2kpi9X/EfyGjApIjYR/TvCOWbdikaIpiMtvfzCqsuOY7PnUlEnI6UH/pyCn SsuwtvTzEzjnFA6ooetWdQAoQLFFSy4B7ju3pAorbKU45qpIW0/o4EbE1zQD/4//zkNb UAgTCIkC+jdOGZx7OpbVUrV0VOlD0zCrzch1DuyPjAUhwTWQ/4/SXE5hl4EILaRiTjTQ Sz8DEuWqJjNzPKa6jvtg3ZRD+Iow4qnftULqS2lUIMvwoT0XelAkVzo5Tg3M93FJhacs vzig==; 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=1781499912; x=1782104712; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VMjTTTKidnJLxh8Wou9dp2d2hHJ/l3piLeUjCPvKFZs=; b=K36ypA1EczHxr7ZVPurPRB4DToFvzV+qCVxPokO/+JjYbae07FtMOUMJOcdaMrphRR iE/Bbw3+rsb3zWq0NGiKcnTn3gVANEEFPvVzrQF5FZS33E88leeYpvdMzfPZjGm5VxDQ sywg5tRVG9YwClWga6IZobqdCWntBiE7ArD0QTZSVW9Qt02kkU7ZYplkf8piuSvlT+EF 2d1lCLgGfHmtBbejN8ZNgwxNGz8KTCUwK3V3I33bpvFYPivn1aqxjb4xzHO52+e1GZsd CXjU9nYPv8bVTNRz7irWTmYki26JM1RbSFrPRKyc6fYoQBm6m750qisxg8jeIcpZVQH9 cTMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781499912; x=1782104712; h=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=VMjTTTKidnJLxh8Wou9dp2d2hHJ/l3piLeUjCPvKFZs=; b=CON6AAYTGMC7NyMBnq8DBgL6vLHmzrcVHy6HFTfYABvUUbgatO2wn+oYL/7LQDSlH4 TY1fdg0+qJ7PRu3XYwUMIe0DNeMlREUlaDESEWvnbyZ8E9S+4NeioHVcCR/CgDyKC3lZ t1N5XRe5tCVbvIEnhRmUK1o5TsmuuF7NuHB9cB2ewR+UYzKbRXOuMhp6ewqCGo01ammg 9HEQWmNmqOiJeulqr5mg2Rjb/UfUUd10p4ktPuBOwFAqNxyNU3FKdHW0+/bXSKeXMgjQ JHDsVhKDTOKOK4m9+T6FrrMhN64z9rO5Ouq/VHMXHrya5+lLhp0bjGOMju3eFs0x5kkF xhbA== X-Forwarded-Encrypted: i=1; AFNElJ/7gOIqrQXeJbyy7ShRvAqFxKd8G+dnxALm3IZ7EkPm7LjTSoeIpVXzpnkPwZeVymgYWCBGQeUQVAIxnxwC@lists.postgresql.org X-Gm-Message-State: AOJu0YxPIQQQXVM68Qp9+2icaCG8PcvT+SZRkczkJ8odot8tTj6xK8z7 j5PV0OIyujIt7ZHYNDWHz+UfY0mOMfLvBPF+s9edDb+PBWHGStlzN/8AcUGUXbaVHZJhs5praSB v1QBz28l0f71nQXA8+G5Oa+iwg4MC2v4= X-Gm-Gg: Acq92OGTBhjCoIxrGMcmjKZbOVbe8zW07omd8evzYZeRdGFdq7IqFKaOGNKlc0qafb1 ydEn0wApJ+vp/9gDEWLQWiaZOQxCJtmQS2LmNnBzXIUFshhwXgom0zxYKNuY9tvv/5ictmeGbq0 ma4cVjJbvASg6sT3Y730pnSH+jzruY98PGAETnfpbuaJEpCfl7EzNS41/IY+e2CnjzQtT75x6E0 oYwCZ1/cbeLR1167VE7v68nZUQO2cb/WQUhHu3QAZm3yGxnpxAv0yAiBVt6PUYM57KrYkMB0kk2 sz9ot1Wp03CZXbvcgA== X-Received: by 2002:ac8:58ca:0:b0:517:a174:f419 with SMTP id d75a77b69052e-517fe23b95bmr188943081cf.19.1781499911721; Sun, 14 Jun 2026 22:05:11 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Smith Date: Mon, 15 Jun 2026 15:04:44 +1000 X-Gm-Features: AVVi8Cc4tj18kM29j7XBGvUtwSfZf-TTjV_OLKTg0FLW6ZkzFDrxcyqEpYeoEkU Message-ID: Subject: Re: Proposal: Conflict log history table for Logical Replication To: Dilip Kumar Cc: vignesh C , shveta malik , Amit Kapila , Nisha Moond , Masahiko Sawada , Bharath Rupireddy , PostgreSQL Hackers Content-Type: text/plain; charset="UTF-8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Some review comments for v50-0002. ====== Commit message 1. Missing commit message. ====== GENERAL 2. + if (IsConflictLogTableClass(rel->rd_rel)) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("permission denied: \"%s\" is a conflict log table", + RelationGetRelationName(rel)), + errdetail("Conflict log tables are system-managed tables for logical replication conflicts."))); 2a. There are many duplicate "permission denied" messages in this patch, like above. Is it possible to do something like introduce an OBJECT_SUBSCRIPTION_CLT so you can delegate all these to common aclcheck_error(ACLCHECK_NO_PRIV, OBJECT_SUBSCRIPTION_CLT, clt_name) error processing? Or, if that's a bit too hacky, put a common error function in catalog.c. e.g. if (IsConflictLogTableClass(rel->rd_rel)) ConflictLogTablePermissionDenied(rel); ~ 2b. I'm not sure that the errdetail is really needed, since none of the nearby messages have extra errdetail. Instead, you could just modify the errmsg like: "permission denied: \"%s\" is a system-managed conflict log table". ====== src/backend/commands/lockcmds.c 3. + if (IsConflictLogTableNamespace(get_rel_namespace(relid)) && + lockmode > AccessShareLock) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("permission denied: \"%s\" is a conflict log table", + rv->relname), + errdetail("Conflict log tables are system-managed and cannot be locked explicitly, except in ACCESS SHARE mode."))); + Is ERRCODE_INSUFFICIENT_PRIVILEGE/"permission denied" the correct errcode/errmsg to use here. e.g., is lack of privilege really the problem given it was not supposed to be locked by *anybody*? ====== Kind Regards, Peter Smith. Fujitsu Australia