Re: TupleDescAttr bounds checks

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: Alexander Lakhin <exclusion@gmail.com>, Robert Haas <robertmhaas@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-05T03:45:27Z
Lists: pgsql-hackers
Peter Eisentraut <peter@eisentraut.org> writes:
> On 04.04.26 17:38, Tom Lane wrote:
>> After poking at that: testing tableoid does sort of work, in that it
>> reads as the OID of the target table named in COPY.  But I think any
>> rational use for a test on tableoid here would be in connection with
>> a partitioned target table, and the user would wish it to read as the
>> OID of the destination partition.  So I think we should disallow
>> tableoid along with the other system columns, pending somebody having
>> the ambition to make that work.

> I think this is the same issue that was discussed here:
> https://www.postgresql.org/message-id/flat/30c39ee8-bb11-4b8f-9697-45f7e018a8d3%40eisentraut.org
> There was no conclusion there, but I agree with the proposal to prohibit 
> this use.

Ah, indeed.  Jian's patch in that thread seems rough but potentially
workable to me, but seemingly the thread tailed off for lack of
interest.  I don't want to revive it now as part of a bug fix.

Disallowing tableoid for now, and then re-allowing it if someone
picks up that patch down the road, seems like a good solution.
For one thing, since that patch changes the semantics of tableoid
in COPY WHERE, I think it'd be a good idea to have a release or
two in between where we throw error.  That'd be helpful to flush
out any field usages that might be affected.

			regards, tom lane



Commits

  1. Avoid unsafe access to negative index in a TupleDesc.

  2. Disallow system columns in COPY FROM WHERE conditions.

  3. Add a test for creating an index on a whole-row expression.

  4. Bounds-check access to TupleDescAttr with an Assert.

  5. Prevent spurious "indexes on virtual generated columns are not supported".