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.94.2) (envelope-from ) id 1s7mTf-007Nkb-Cm for pgsql-hackers@arkaria.postgresql.org; Fri, 17 May 2024 01:33:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1s7mTf-002OxD-9u for pgsql-hackers@arkaria.postgresql.org; Fri, 17 May 2024 01:33:43 +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.94.2) (envelope-from ) id 1s7mTf-002Ox5-0U for pgsql-hackers@lists.postgresql.org; Fri, 17 May 2024 01:33:43 +0000 Received: from mail-io1-xd34.google.com ([2607:f8b0:4864:20::d34]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s7mTb-000d6e-6b for pgsql-hackers@postgresql.org; Fri, 17 May 2024 01:33:42 +0000 Received: by mail-io1-xd34.google.com with SMTP id ca18e2360f4ac-7e1bf0e9ab5so4178339f.3 for ; Thu, 16 May 2024 18:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715909618; x=1716514418; darn=postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=M2CjM5Kj37jJp3Gq/oOmY5i9Ed94XVubZx5QTc7MDRU=; b=AAOmBh2HHE80ppeKjlVJVwewGzuQJ0pPk8VwQoarVeJLeexZ29z60k+x8YUZrpITr9 hc0xejaki8JbBeCxlVrjO8F7jwgXM9tPas+HFVzPXKLJ3zeGc3v9H/VobXJh7QewLfll F9EMKKIqSRE3j3VhoexYJB26sMyQmPmBxJ37HNv2lFwAuu2Ebke49dkt8YjBrat1+PwX 3d4IaMKoynC5pUjeLNswkQFxlBu3/X8SzSWVQXdtqj+Cra6M3W+A8zH7o8yoI84EMAy7 MnKrfhdWEILPXvXTqwHNJELjO8Jd5tD4wmgae/z7QXbNlUjjwuGSADpjA0tW2GNxDI3q WgBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715909618; x=1716514418; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=M2CjM5Kj37jJp3Gq/oOmY5i9Ed94XVubZx5QTc7MDRU=; b=sjCam7a6EouFPLCPYg9wd0d/6lxpql4ci1/TlnEwO27Aiy3Y+EzdyThQm8+fcD5gF9 pIAj/IQ4mOo4g4aUwa94tTxqzIps2HdGMB9RXlxti82nYW/6WQEODDFSpBZu7s96yl0D JonAVZWHebrOYvIiCG6MJErD+IWoJPwZjslU4ePUA/Tob5cvUP+jEUBnGStSeAA6Ht7p DjzojbpLC48yj53u2R5bJyfwMMA9veKrInZl3LuoNnJ2aOwg5YDI23PPuUDIg/jUYYZ2 bgDXLxn1/yDEXGpkqaadjZ+hLQc+QDfXRI4uw3Yvp3zjXGeI5MySzqVVZRvSWjo9HcSn vYlQ== X-Forwarded-Encrypted: i=1; AJvYcCXzO3IjzWmX1NsheATkKOp0Do2C4YaNFSmjYZVn/gmpZzIYiO7da/hkzdHLTKW+tMFOWpSrNowBoO6JOvIXNWfo9akxhBAmehuz7MQW X-Gm-Message-State: AOJu0YxTvl1pppNeT8Ln1QpMLDK1oZ8XUOWZ2ch65UlXuDdhxbuGCnR9 jsPRKbP0oH8HTfjKW3b00sMexySXORE9TrI3Vr0jmgbBBim6SAJr X-Google-Smtp-Source: AGHT+IGzW7ATkYPZYFZWoGdEq3gJr/i2bB2C4h12/veynaWJl+M/Dm7Nj2Qs/D/xwwXJSVUYyTld4A== X-Received: by 2002:a5e:c702:0:b0:7de:e20e:9f0b with SMTP id ca18e2360f4ac-7e1b51a3f42mr2305819039f.2.1715909618085; Thu, 16 May 2024 18:33:38 -0700 (PDT) Received: from nathanxps13 (162-195-168-172.lightspeed.stlsmo.sbcglobal.net. [162.195.168.172]) by smtp.gmail.com with ESMTPSA id 8926c6da1cb9f-489371410c6sm4448671173.64.2024.05.16.18.33.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 May 2024 18:33:37 -0700 (PDT) Date: Thu, 16 May 2024 20:33:35 -0500 From: Nathan Bossart To: Michael Paquier Cc: Tom Lane , pgsql-hackers@postgresql.org Subject: Re: pg_sequence_last_value() for unlogged sequences on standbys Message-ID: <20240517013335.GA1743971@nathanxps13> References: <2746846.1714771326@sss.pgh.pa.us> <20240507171033.GA2524814@nathanxps13> <4179588.1715103856@sss.pgh.pa.us> <20240507184051.GA2600328@nathanxps13> <86044.1715108521@sss.pgh.pa.us> <20240507193942.GB2600328@nathanxps13> <20240510210055.GA428795@nathanxps13> <20240513210107.GA684121@nathanxps13> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="FCuugMFkClbJLl1L" Content-Disposition: inline In-Reply-To: <20240513210107.GA684121@nathanxps13> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --FCuugMFkClbJLl1L Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Here is a rebased version of 0002, which I intend to commit once v18 development begins. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com --FCuugMFkClbJLl1L Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v5-0001-Simplify-pg_sequences-a-bit.patch" From e9cba5e4303c7fa5ad2d7d5deb23fe0b1c740b09 Mon Sep 17 00:00:00 2001 From: Nathan Bossart Date: Tue, 7 May 2024 14:35:34 -0500 Subject: [PATCH v5 1/1] Simplify pg_sequences a bit. XXX: NEEDS CATVERSION BUMP --- src/backend/catalog/system_views.sql | 6 +----- src/backend/commands/sequence.c | 12 ++++-------- src/test/regress/expected/rules.out | 5 +---- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 53047cab5f..b32e5c3170 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -176,11 +176,7 @@ CREATE VIEW pg_sequences AS S.seqincrement AS increment_by, S.seqcycle AS cycle, S.seqcache AS cache_size, - CASE - WHEN has_sequence_privilege(C.oid, 'SELECT,USAGE'::text) - THEN pg_sequence_last_value(C.oid) - ELSE NULL - END AS last_value + pg_sequence_last_value(C.oid) AS last_value FROM pg_sequence S JOIN pg_class C ON (C.oid = S.seqrelid) LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE NOT pg_is_other_temp_schema(N.oid) diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 28f8522264..cd0e746577 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -1783,21 +1783,17 @@ pg_sequence_last_value(PG_FUNCTION_ARGS) /* open and lock sequence */ init_sequence(relid, &elm, &seqrel); - if (pg_class_aclcheck(relid, GetUserId(), ACL_SELECT | ACL_USAGE) != ACLCHECK_OK) - ereport(ERROR, - (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied for sequence %s", - RelationGetRelationName(seqrel)))); - /* * We return NULL for other sessions' temporary sequences. The * pg_sequences system view already filters those out, but this offers a * defense against ERRORs in case someone invokes this function directly. * * Also, for the benefit of the pg_sequences view, we return NULL for - * unlogged sequences on standbys instead of throwing an error. + * unlogged sequences on standbys and for sequences for which we lack + * USAGE or SELECT privileges instead of throwing an error. */ - if (!RELATION_IS_OTHER_TEMP(seqrel) && + if (pg_class_aclcheck(relid, GetUserId(), ACL_SELECT | ACL_USAGE) == ACLCHECK_OK && + !RELATION_IS_OTHER_TEMP(seqrel) && (RelationIsPermanent(seqrel) || !RecoveryInProgress())) { Buffer buf; diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index ef658ad740..04b3790bdd 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1699,10 +1699,7 @@ pg_sequences| SELECT n.nspname AS schemaname, s.seqincrement AS increment_by, s.seqcycle AS cycle, s.seqcache AS cache_size, - CASE - WHEN has_sequence_privilege(c.oid, 'SELECT,USAGE'::text) THEN pg_sequence_last_value((c.oid)::regclass) - ELSE NULL::bigint - END AS last_value + pg_sequence_last_value((c.oid)::regclass) AS last_value FROM ((pg_sequence s JOIN pg_class c ON ((c.oid = s.seqrelid))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) -- 2.25.1 --FCuugMFkClbJLl1L--