Re: Large expressions in indexes can't be stored (non-TOASTable)
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, "Jonathan S. Katz" <jkatz@postgresql.org>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Michael Paquier <michael@paquier.xyz>
Date: 2024-09-23T15:50:21Z
Lists: pgsql-hackers
Attachments
On Mon, Sep 23, 2024 at 04:00:00PM +0300, Alexander Lakhin wrote: > I tested it with two code modifications (1st is to make each created > expression index TOASTed (by prepending 1M of spaces to the indexeprs > value) and 2nd to make each created index an expression index (by > modifying index_elem_options in gram.y) - both modifications are kludgy so > I don't dare to publish them) and found no other snapshot-related issues > during `make check-world`. Thanks. Here is an updated patch with tests and comments. I've also moved the calls to PushActiveSnapshot()/PopActiveSnapshot() to surround only the section of code where the snapshot is needed. Besides being more similar in style to other fixes I found, I think this is safer because much of this code is cautious to avoid deadlocks. For example, DefineIndex() has the following comment: /* * The snapshot subsystem could still contain registered snapshots that * are holding back our process's advertised xmin; in particular, if * default_transaction_isolation = serializable, there is a transaction * snapshot that is still active. The CatalogSnapshot is likewise a * hazard. To ensure no deadlocks, we must commit and start yet another * transaction, and do our wait before any snapshot has been taken in it. */ I carefully inspected all the code paths this patch touches, and I think I've got all the details right, but I would be grateful if someone else could take a look. -- nathan
Commits
-
Ensure we have a snapshot when updating various system catalogs.
- fe8ea7a2a893 17.6 landed
- ddfcfb7cec68 15.14 landed
- b7ba2c0308ce 13.22 landed
- b65be6ef00e2 14.19 landed
- 706054b11b95 18.0 landed
- 24135398f1e1 16.10 landed
-
Remove pg_replication_origin's TOAST table.
- 16bf24e0e471 18.0 landed
-
Restrict password hash length.
- 8275325a06ed 18.0 cited
-
Ensure we have a snapshot when updating pg_index entries.
- b52adbad4674 18.0 landed
-
Add TOAST table to pg_index.
- b52c4fc3c09e 18.0 landed
-
Add toast tables to most system catalogs
- 96cdeae07f93 12.0 cited