Thread
Commits
-
Ensure we have a snapshot while dropping ON COMMIT DROP temp tables.
- 57e6e861d437 16.1 landed
- 0d1a7cd14ee1 15.5 landed
- 54b208f90963 17.0 landed
- a295684b8914 11.22 landed
- f6e1ee3cfa3e 14.10 landed
- 1e678175c575 13.13 landed
- 07eb22a7761f 12.17 landed
-
Assert failure when CREATE TEMP TABLE
Richard Guo <guofenglinux@gmail.com> — 2023-10-16T11:02:29Z
I came across an Assert failure while running sqlancer. The repro query is CREATE TEMP TABLE t0 (c0 int4range CHECK ((('')||(0.005014271491241007) NOT IN (upper(''), ((' 9O')||FALSE))) BETWEEN SYMMETRIC (initcap('dj')LIKE(((('EizW~')||t0.c0) COLLATE "en_AG.utf8"))) AND ((((0.18773675)::MONEY) IN (0.52246463::MONEY))AND(t0.c0 BETWEEN SYMMETRIC ((t0.c0+t0.c0)) AND t0.c0)))) USING heap ON COMMIT DROP; The failure happens in init_toast_snapshot(): /* * Catalog snapshots can be returned by GetOldestSnapshot() even if not * registered or active. That easily hides bugs around not having a * snapshot set up - most of the time there is a valid catalog snapshot. * So additionally insist that the current snapshot is registered or * active. */ Assert(HaveRegisteredOrActiveSnapshot()); And 'git bisect' says that the first bad commit is 2489d76c, which makes me confused because the problemed query does not seem to involve nullingrels stuff. Thanks Richard -
Re: Assert failure when CREATE TEMP TABLE
Tom Lane <tgl@sss.pgh.pa.us> — 2023-10-16T15:46:54Z
Richard Guo <guofenglinux@gmail.com> writes: > I came across an Assert failure while running sqlancer. The repro query > is > CREATE TEMP TABLE t0 (c0 int4range CHECK ((('')||(0.005014271491241007) NOT > IN (upper(''), ((' 9O')||FALSE))) BETWEEN SYMMETRIC > (initcap('dj')LIKE(((('EizW~')||t0.c0) COLLATE "en_AG.utf8"))) AND > ((((0.18773675)::MONEY) IN (0.52246463::MONEY))AND(t0.c0 BETWEEN SYMMETRIC > ((t0.c0+t0.c0)) AND t0.c0)))) USING heap ON COMMIT DROP; Hmm. AFAICT, the critical thing about this CHECK condition is simply that it's bulky enough to create an out-of-line toasted "conbin" field in pg_constraint. When we come to ON COMMIT DROP, we have to delete the pg_constraint entry and thereby the toast item, and we evidently lack a snapshot at that point. > And 'git bisect' says that the first bad commit is 2489d76c, which makes > me confused because the problemed query does not seem to involve > nullingrels stuff. Probably the reason is that addition of nullingrels fields to the Vars pushed it over the edge of needing to be out-of-line. The test case is very close to the line as stated --- for example, I found that it didn't crash if I changed "en_AG.utf8" to "C", and wasted some time pursuing the idea that the collation had something to do with it. The crash got much more stable after adding a couple more dummy clauses to the CHECK condition, and I've also reproduced it with clauses as straightforward as "c0 < 'very-long-constant'". regards, tom lane -
Re: Assert failure when CREATE TEMP TABLE
Alexander Law <exclusion@gmail.com> — 2023-10-17T09:00:00Z
16.10.2023 18:46, Tom Lane wrote: > Richard Guo <guofenglinux@gmail.com> writes: >> I came across an Assert failure while running sqlancer. The repro query >> is > Hmm. AFAICT, the critical thing about this CHECK condition is simply > that it's bulky enough to create an out-of-line toasted "conbin" field > in pg_constraint. When we come to ON COMMIT DROP, we have to delete > the pg_constraint entry and thereby the toast item, and we evidently > lack a snapshot at that point. That's very similar to bug #18127, and looks like one more case to the collection [1], with RemoveConstraintById() -> CatalogTupleDelete() -> simple_heap_delete() ... https://www.postgresql.org/message-id/9541c507-a325-7768-38b0-90f6532c01e3%40gmail.com Best regards, Alexander
-
Re: Assert failure when CREATE TEMP TABLE
Richard Guo <guofenglinux@gmail.com> — 2023-10-18T06:57:37Z
On Mon, Oct 16, 2023 at 11:46 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Richard Guo <guofenglinux@gmail.com> writes: > > And 'git bisect' says that the first bad commit is 2489d76c, which makes > > me confused because the problemed query does not seem to involve > > nullingrels stuff. > > Probably the reason is that addition of nullingrels fields to the Vars > pushed it over the edge of needing to be out-of-line. The test case > is very close to the line as stated --- for example, I found that it > didn't crash if I changed "en_AG.utf8" to "C", and wasted some time > pursuing the idea that the collation had something to do with it. > The crash got much more stable after adding a couple more dummy clauses > to the CHECK condition, and I've also reproduced it with clauses as > straightforward as "c0 < 'very-long-constant'". Ah, this clears up my confusion. Thanks for the fix. Thanks Richard