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 1vbvEd-00GIfD-1b for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 06:35:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vbvEa-00CCMV-1k for pgsql-hackers@arkaria.postgresql.org; Sat, 03 Jan 2026 06:35:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vbvEZ-00CCMM-31 for pgsql-hackers@lists.postgresql.org; Sat, 03 Jan 2026 06:35:32 +0000 Received: from mail-yx1-xb133.google.com ([2607:f8b0:4864:20::b133]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vbvEY-003vrm-39 for pgsql-hackers@lists.postgresql.org; Sat, 03 Jan 2026 06:35:31 +0000 Received: by mail-yx1-xb133.google.com with SMTP id 956f58d0204a3-6446c1a7a1cso10247746d50.3 for ; Fri, 02 Jan 2026 22:35:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767422129; x=1768026929; 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=/GNaBsYBfU/4BklhownMGffe1NXMIz4qTujo0NQUonE=; b=GxFI/pehaVKVSYgvZZZheRgF+hG4Nja9zIkGoxUKKnZNxcLVJs+UOut9fWgtW0Ep9I IRmi72NG075jfXZC75yGq4qhX2IWqMepiZUfuxJ5k2C/7MYHmTsFJzr8C66V/CFm/9Mq 6MFngvrd5f+XywUrzM0cWRqW8k/OIlR+kyNoly7/i5eX98VB3RAhG3/V1AqM5r/0X/bb rg/4o+PYZyDr20xhmvpubmTtJQhVZSr/ybD4/Zr0Qy/jOQaaoyAF6QjwlxlgXwwRXt6u vecj3JLQ0DAKEo4z3t2UCSDSihLF3SRbQYg/nIgXPOYtIkrFLUr7qm7Pyw2X0VldNKMS xWig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767422129; x=1768026929; 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=/GNaBsYBfU/4BklhownMGffe1NXMIz4qTujo0NQUonE=; b=Jyy4Kq0QynvACrTXTV8ZPkz78IgD8ViZ1CVvgqpr2+E2nMXoEqEDSMGHDSGJP4JL6V 6e7VjbSlyG3ntdv8LOIQ0dRxvvKxnSH1ENkjJa2abvebDCH1LCc1YIHfufIT0ryhBw1M wPy2hnCHVCk0zk7vR9lYXP+cpE0w601hGO+0plqzWwAuMIwoW/ZQ/TnNgO/S/4BJwC96 bJ5XRKBpnH/ykzm47MEZTzFF+JKlNNho1Tq2hoydn2pSi7eXtvBVlZ3e1zjJQ+sD043M cpW2dUTPyz8BBp9Uu/QM/fmbnDGsau2LzxNgthYP6JsTfPGzSgqbgCWx2mevvJwX2FDZ 7d8w== X-Gm-Message-State: AOJu0YxD3vhVqpuH2oYK0iHI7wXUJtsKtvmYJe1B2KQeMmeUWU3Cuw1+ xSOIIDI0bELo/tdVs0OAUaU8E7JPrMRXDo+7+xlaNZWn348bmkhx4H4UrbMSVn/OG8GAEMYWhyB OHVuL6lmL59ipHb2y6Aqq84em+Jm993E= X-Gm-Gg: AY/fxX7uEoSd4F+L/PjervlRdtQRVRIR6h2Nx4yALUNOPgpyP4vapieG6X5DyDjEX4/ 7M+D2mZfr5RnpeABMc/9QBvLPegLgHxP/xbEAYMRX/5O8z4khuYdeCV/jh2C5x/foTadBZdrnjX sOiqUgt288uNiclB/M7I17QLlHlG8O4f6mmedpnvdI2KvcoZgG1SaBLAjENtfrZT6efHu4NZsW8 R00BpZYRm9PjDD/CUWh72eFJgC0h7vI/fwzcsR9jNkt9nyhcE8JbLzSgZRQxzAqe5yTuBvY0JGy d65261RtPjh3p11HHEXKX9xFqf/jm6UpEgH9hxU91TGNUvaIwNtaxeGQMqFhJXXDft9iQRHgHFc Gw4YQ05dzdZZ0kA== X-Google-Smtp-Source: AGHT+IH4NAz3cJ748pbhISFTvKn39N5OO3zfuZMFZHgYuXUCBeUBoS/f6wosG+Eryta+52Zco+TUpzOEhF42wY4lH+A= X-Received: by 2002:a53:bdc5:0:b0:645:68e5:11df with SMTP id 956f58d0204a3-6466a84549emr28534670d50.12.1767422129202; Fri, 02 Jan 2026 22:35:29 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavel Stehule Date: Sat, 3 Jan 2026 07:34:52 +0100 X-Gm-Features: AQt7F2rgxlw3GV4H7NloTlPCTqnRXLcpy2pudR72ATGYWmCepppYFJUJyEVXtmg Message-ID: Subject: Re: not fully correct error message To: jian he Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000002e48a90647760821" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002e48a90647760821 Content-Type: multipart/alternative; boundary="0000000000002e48a7064776081f" --0000000000002e48a7064776081f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi =C4=8Dt 1. 1. 2026 v 11:05 odes=C3=ADlatel jian he napsal: > On Thu, Jan 1, 2026 at 3:10=E2=80=AFPM Pavel Stehule > wrote: > > > > Hi > > > > I tested one use case, and maybe I found little bit possible error > message > > > > create procedure test() > > as $$ > > begin > > vacuum; > > end; > > $$ language plpgsql; > > > > (2026-01-01 08:04:05) postgres=3D# call test(); > > ERROR: 25001: VACUUM cannot be executed from a function > > CONTEXT: SQL statement "vacuum" > > PL/pgSQL function test() line 3 at SQL statement > > LOCATION: PreventInTransactionBlock, xact.c:3695 > > (2026-01-01 08:09:18) postgres=3D# > > > > should be "VACUUM cannot be executed from a function or a procedure" > instead ? > > > > hi. > "VACUUM cannot be executed from a function or a procedure" > looks good to me. > > similarly, in ExecWaitStmt we have: > ereport(ERROR, > errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), > errmsg("WAIT FOR must be only called without an active > or registered snapshot"), > errdetail("WAIT FOR cannot be executed from a function > or a procedure or within a transaction with an isolation level higher > than READ COMMITTED.")); > > PreventInTransactionBlock is used in so many places, but this error > message: > `` > (errmsg("%s cannot be executed from a function", stmtType))); > `` > only appears once in the regress tests. > maybe we can add some dummy tests for it. > here is a patch (with small regress test) Regards Pavel --0000000000002e48a7064776081f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

=C4=8Dt 1. 1. 2026 v=C2=A011:= 05 odes=C3=ADlatel jian he <jian.universality@gmail.com> napsal:
On Thu, Jan 1, 2026 at 3:10=E2=80=AFPM Pav= el Stehule <pavel.stehule@gmail.com> wrote:
>
> Hi
>
> I tested one use case, and maybe I found little bit possible error mes= sage
>
> create procedure test()
> as $$
> begin
>=C2=A0 =C2=A0vacuum;
> end;
> $$ language plpgsql;
>
> (2026-01-01 08:04:05) postgres=3D# call test();
> ERROR:=C2=A0 25001: VACUUM cannot be executed from a function
> CONTEXT:=C2=A0 SQL statement "vacuum"
> PL/pgSQL function test() line 3 at SQL statement
> LOCATION:=C2=A0 PreventInTransactionBlock, xact.c:3695
> (2026-01-01 08:09:18) postgres=3D#
>
> should be "VACUUM cannot be executed from a function or a procedu= re" instead ?
>

hi.
"VACUUM cannot be executed from a function or a procedure"
looks good to me.

similarly, in ExecWaitStmt we have:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ereport(ERROR,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 errcode(ERRCODE_OBJ= ECT_NOT_IN_PREREQUISITE_STATE),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 errmsg("WAIT F= OR must be only called without an active
or registered snapshot"),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 errdetail("WAI= T FOR cannot be executed from a function
or a procedure or within a transaction with an isolation level higher
than READ COMMITTED."));

PreventInTransactionBlock is used in so many places, but this error message= :
``
(errmsg("%s cannot be executed from a function", stmtType)));
``
only appears once in the regress tests.
maybe we can add some dummy tests for it.

here is a patch (with small regress test)

Regar= ds

Pavel

--0000000000002e48a7064776081f-- --0000000000002e48a90647760821 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-VACUUM-cannot-be-executed-inside-a-function-or-a-pro.patch" Content-Disposition: attachment; filename="0001-VACUUM-cannot-be-executed-inside-a-function-or-a-pro.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjxxh2ur0 RnJvbSBhYTU3ZTNhODBlNWVlN2JjZTEyMWFkZGM2MDdkMTk4ZTY3OTQxZmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBTYXQsIDMgSmFuIDIwMjYgMDc6MzI6MjYgKzAxMDAKU3ViamVjdDogW1BB VENIXSBWQUNVVU0gY2Fubm90IGJlIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIG9yIGEgcHJv Y2VkdXJlCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyAgICAgICAgICAg ICAgICAgIHwgIDIgKy0KIC4uLi9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX3RyYW5zYWN0 aW9uLm91dCAgIHwgMTMgKysrKysrKysrKysrKwogc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBn c3FsX3RyYW5zYWN0aW9uLnNxbCAgICAgfCAxNCArKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCAyOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jCmluZGV4IDg0MmZhYTQ0MjMyLi41Y2Y4NWUyZjM1YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hhY3QuYwpAQCAtMzY5NSw3ICszNjk1LDcgQEAgUHJldmVudEluVHJhbnNhY3Rpb25CbG9j ayhib29sIGlzVG9wTGV2ZWwsIGNvbnN0IGNoYXIgKnN0bXRUeXBlKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfQUNUSVZFX1NRTF9UUkFOU0FDVElPTiksCiAJCS8qIHRy YW5zbGF0b3I6ICVzIHJlcHJlc2VudHMgYW4gU1FMIHN0YXRlbWVudCBuYW1lICovCi0JCQkJIGVy cm1zZygiJXMgY2Fubm90IGJlIGV4ZWN1dGVkIGZyb20gYSBmdW5jdGlvbiIsIHN0bXRUeXBlKSkp OworCQkJCSBlcnJtc2coIiVzIGNhbm5vdCBiZSBleGVjdXRlZCBmcm9tIGEgZnVuY3Rpb24gb3Ig YSBwcm9jZWR1cmUiLCBzdG10VHlwZSkpKTsKIAogCS8qIElmIHdlIGdvdCBwYXN0IElzVHJhbnNh Y3Rpb25CbG9jayB0ZXN0LCBzaG91bGQgYmUgaW4gZGVmYXVsdCBzdGF0ZSAqLwogCWlmIChDdXJy ZW50VHJhbnNhY3Rpb25TdGF0ZS0+YmxvY2tTdGF0ZSAhPSBUQkxPQ0tfREVGQVVMVCAmJgpkaWZm IC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfdHJhbnNhY3Rpb24u b3V0IGIvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfdHJhbnNhY3Rpb24ub3V0 CmluZGV4IGFkZmYxMGZhNmQ2Li5iY2RmNzk1ODgyMyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdz cWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfdHJhbnNhY3Rpb24ub3V0CisrKyBiL3NyYy9wbC9wbHBn c3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX3RyYW5zYWN0aW9uLm91dApAQCAtNzM2LDYgKzczNiwx OSBAQCBTRUxFQ1QgKiBGUk9NIHRlc3QxOwogIDIgfCAKICgyIHJvd3MpCiAKKy0tIFZBQ1VVTSBj YW5ub3QgYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gb3IgYSBwcm9jZWR1cmUKK0NSRUFU RSBQUk9DRURVUkUgdmFjdXVtX2luc2lkZV9wcm9jZWR1cmUoKQorTEFOR1VBR0UgcGxwZ3NxbCBB UyAkJAorQkVHSU4KKyAgVkFDVVVNOworRU5EOworJCQ7CistLSBlcnJvcgorQ0FMTCB2YWN1dW1f aW5zaWRlX3Byb2NlZHVyZSgpOworRVJST1I6ICBWQUNVVU0gY2Fubm90IGJlIGV4ZWN1dGVkIGZy b20gYSBmdW5jdGlvbiBvciBhIHByb2NlZHVyZQorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIlZB Q1VVTSIKK1BML3BnU1FMIGZ1bmN0aW9uIHZhY3V1bV9pbnNpZGVfcHJvY2VkdXJlKCkgbGluZSAz IGF0IFNRTCBzdGF0ZW1lbnQKK0RST1AgUFJPQ0VEVVJFIHZhY3V1bV9pbnNpZGVfcHJvY2VkdXJl KCk7CiBEUk9QIFRBQkxFIHRlc3QxOwogRFJPUCBUQUJMRSB0ZXN0MjsKIERST1AgVEFCTEUgdGVz dDM7CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfdHJhbnNhY3Rp b24uc3FsIGIvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX3RyYW5zYWN0aW9uLnNxbApp bmRleCBjNzNmY2E3ZTAzZS4uNWU4ZGEzZWM0YzQgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3Fs L3NyYy9zcWwvcGxwZ3NxbF90cmFuc2FjdGlvbi5zcWwKKysrIGIvc3JjL3BsL3BscGdzcWwvc3Jj L3NxbC9wbHBnc3FsX3RyYW5zYWN0aW9uLnNxbApAQCAtNjMxLDYgKzYzMSwyMCBAQCAkJDsKIFNF TEVDVCAqIEZST00gdGVzdDE7CiAKIAorLS0gVkFDVVVNIGNhbm5vdCBiZSBleGVjdXRlZCBpbnNp ZGUgYSBmdW5jdGlvbiBvciBhIHByb2NlZHVyZQorCitDUkVBVEUgUFJPQ0VEVVJFIHZhY3V1bV9p bnNpZGVfcHJvY2VkdXJlKCkKK0xBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisgIFZBQ1VV TTsKK0VORDsKKyQkOworCistLSBlcnJvcgorQ0FMTCB2YWN1dW1faW5zaWRlX3Byb2NlZHVyZSgp OworCitEUk9QIFBST0NFRFVSRSB2YWN1dW1faW5zaWRlX3Byb2NlZHVyZSgpOworCiBEUk9QIFRB QkxFIHRlc3QxOwogRFJPUCBUQUJMRSB0ZXN0MjsKIERST1AgVEFCTEUgdGVzdDM7Ci0tIAoyLjUy LjAKCg== --0000000000002e48a90647760821--