Re: vacuumdb: permission denied for schema "pg_temp_7"

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Nathan Bossart <nathandbossart@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>, Fujii Masao <masao.fujii@oss.nttdata.com>, Christophe Pettus <xof@thebuild.com>, vaibhave postgres <postgresvaibhave@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-bugs@lists.postgresql.org, vsekar@microsoft.com
Date: 2024-10-07T19:40:54Z
Lists: pgsql-bugs

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. vacuumdb: Schema-qualify operator in catalog query's WHERE clause.

  2. reindexdb: Skip reindexing temporary tables and indexes.

  3. vacuumdb: Skip temporary tables in query to build list of relations

  4. Use catalog query to discover tables to process in vacuumdb

On Mon, Oct 07, 2024 at 11:16:33AM -0500, Nathan Bossart wrote:
> Regarding commit 1ab67c9...
> 
> On Wed, Sep 25, 2024 at 08:10:16AM +0900, Michael Paquier wrote:
> > Thanks.  As I am kind of behind this one, I'll go fix it first.  Let's
> > sort out the permission bits after that one is sorted out.  REL_17_0
> > is out, so this can happen across all branches.
> 
> For consistency with the surrounding code, I think we should schema-qualify
> the operator and add a newline after "WHERE relpersistence != 't'".  If
> folks agree, I can handle committing the attached patch.

Not just code consistency.  A code comment requires the schema qualification:

	 * Since we execute the constructed query with the default search_path
	 * (which could be unsafe), everything in this query MUST be fully
	 * qualified.

> --- a/src/bin/scripts/vacuumdb.c
> +++ b/src/bin/scripts/vacuumdb.c
> @@ -684,7 +684,8 @@ vacuum_one_database(ConnParams *cparams,
>  	 * Exclude temporary tables, beginning the WHERE clause.
>  	 */
>  	appendPQExpBufferStr(&catalog_query,
> -						 " WHERE c.relpersistence != " CppAsString2(RELPERSISTENCE_TEMP));
> +						 " WHERE c.relpersistence OPERATOR(pg_catalog.!=) "
> +						 CppAsString2(RELPERSISTENCE_TEMP) "\n");